Witam.
Piszę program bazy danych oparty na drzewach BST i potrzebuję pomocy z usuwaniem węzła drzewa. Znalazłem gdzieś kawałek kodu, przerobiłem, ale nie działa. Program zawiesza się.
Mam gorącą prośbę żeby ktoś poszukał błędów lub ewentualnie jeżeli pisał coś opartego o drzewka BST żeby podrzucił kawałek swojego kodu usuwającego węzeł drzewa wskazywany przez wskaźnik. Najlepiej żeby był to kod strukturalny taki mniej-więcej dla początkujących. Pozdrawiam i z góry dziękuję za pomoc.
//funkcja usuwania wezla drzewa
//wsk jest adresem skladnika rodzica, ktory wskazuje na usuwany wezel
void Remove(Tree *wsk) {
Tree *tymcz;
if (wsk->Lewy == NULL)
{
tymcz = wsk;
wsk = wsk->Prawy;
free(tymcz);
}
else if (wsk->Prawy == NULL)
{
tymcz = wsk;
wsk = wsk->Lewy;
free(tymcz);
}
else //jezeli usuwany wezel ma dwoje dziec
{
for (tymcz = wsk->Lewy; tymcz->Prawy != NULL;
tymcz = tymcz->Prawy)
continue;
tymcz->Prawy = wsk->Prawy;
tymcz = wsk;
wsk = wsk->Lewy;
free(tymcz);
}
}