Problem z usuwaniem węzła. BST
Ostatnio zmodyfikowano 2016-03-14 07:06
Chwastek Temat założony przez niniejszego użytkownika |
Problem z usuwaniem węzła. BST » 2016-03-13 22:42:16 Cześć, mam problem z usuwaniem węzłów z drzewa binarnego. Wiem że dwoje dzieci, jedno i żadne to osobne przypadki, zmieniam kod i kombinuje od jakiegoś czasu, ale utknąłem i walę głową w ścianę. Może ktoś zauważy ock? Usuwać usuwał, ale nie wyświetlał potem elementów nad usuniętym węzłem i z drugiego podwęzła, więc dodałem do struktury "rodzica" i teraz na etpie usuwania program wysypuje się.
void usuwanie_menu(wezel *r) { int x; cout << endl << "Element do usuniecia: "; cin >> x; szukam(r , x); usuwanie(r); menu(r); }
wezel* szukam(wezel *r, int x) { if(r == NULL) cout << "nie ma drzewa?" << endl; else if(x < r->value) szukam(r->left, x); else if(x > r->value) szukam(r->right, x); else return r; }
wezel* mini(wezel *r) { while(r->left != NULL) r = r->left; return r; }
wezel* wysokosc(wezel *r) { if(r != NULL) { r->height= r->height - 1; wysokosc(r->left); wysokosc(r->right);
} } wezel* usuwanie(wezel *&r) { if(r) { if (r->right == NULL && r->left == NULL) { r = NULL; delete r; } else if(r->right == NULL ) { struct wezel *temp = r; r = r->left; r->parent = temp->parent; wysokosc(r); delete temp; } else if(r->left == NULL) { struct wezel *temp = r; r = r->right; r->parent = temp->parent; wysokosc(r); delete temp; } else { struct wezel *temp = mini(r->right); r->value = temp->value; szukam(r, temp->value); usuwanie(r); delete temp; } } }
|
|
1aam2am1 |
» 2016-03-14 07:06:58 W funkcji szukaj zwracasz r i nic z tym nie robisz. W usuwanie masz wyciek pamięci najpierw wpisujesz null a potem usuwasz. Powinno być odwrotnie |
|
« 1 » |