Usuwanie elementu drzewo BST

0

Witam mam problem z usuwaniem elementu z drzewa BST po usunięciu elementu i próbie wyświetlenia drzewa wywala mi błąd "Program przestał działać" i nie wiem dlaczego mógłby ktoś pomóc?

class BST{
public:
int wartosc;
BST *rodzic;
BST *lewy;
BST *prawy;
BST(int x);

};

BST::BST(int x)
{
wartosc=x;
lewy=NULL;
prawy=NULL;
}

BST * NajwiekszyKluczWPoddrzewie(BST * korzen)
{
BST * x = korzen;

while(x->prawy) x = x->prawy;

return x;
}

BST * Poprzednik(BST * x)
{
if(x->lewy)
return NajwiekszyKluczWPoddrzewie(x->lewy);
BST * y;

do
{
y = x;
x = x->rodzic;
} while(x && (x->prawy != y));

return x;
}

BST* Znajdz(BST *korzen, int x)
{
while(korzen)
{
if(korzen->wartosc==x)
{
return korzen;
}
else if(korzen->wartosc<x)
{
korzen=korzen->prawy;
}
else
{
korzen=korzen->lewy;
}
}
}

void UsunelementDrzewaBST(BST *&korzen, int k)
{

BST* usun = Znajdz(korzen,k);
if (usun)
{
if ((usun->lewy) && (usun->prawy))
{
BST* poprzedni = Poprzednik(usun);
usun->wartosc=poprzedni->wartosc;
if (poprzedni->rodzic->lewy == poprzedni)
poprzedni->rodzic->lewy=poprzedni->lewy;
else
poprzedni->rodzic->prawy=poprzedni->lewy;
delete poprzedni;
}
else
{
BST* poddrzewo = usun->lewy ? usun->lewy : usun->prawy;

      if (usun->rodzic) 
        {
          if (usun->rodzic->lewy == usun) 
            usun->rodzic->lewy = poddrzewo; 
          else
            usun->rodzic->prawy = poddrzewo;

          if (poddrzewo) 
            poddrzewo->rodzic = usun->rodzic;
        }
      else
        {
          poddrzewo->rodzic=NULL;
          korzen=poddrzewo;
        }
      delete usun;
    }
}

}

0

mógłby ktoś pomóc?

Tak, debuger.

0
some_ONE napisał(a):

mógłby ktoś pomóc?

Tak, debuger.

tylko podczas wywolania funkcji usuwania nie wyskakuje blad tylko jak juz usune element i sprobuje na nowo wyswietlic dorzewo to mi wywala i debuger wiele mi nie pomaga...

0
lojo napisał(a):

tylko podczas wywolania funkcji usuwania nie wyskakuje blad tylko jak juz usune element i sprobuje na nowo wyswietlic dorzewo to mi wywala i debuger wiele mi nie pomaga...

To używaj debuggera podczas wyświetlenia.

0

jeśli mialoby mi to pomoc to juz dawno bym sobie sam poradzil

1 użytkowników online, w tym zalogowanych: 0, gości: 1