Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z usuwaniem węzła. BST

Ostatnio zmodyfikowano 2016-03-14 07:06
Autor Wiadomość
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;
}
}
}
P-145989
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
P-145993
« 1 »
  Strona 1 z 1