Mam mały problem, gdyż muszę napisać funkcję UsunElementy(ElementDrzewa * Korzen, int Liczba) usuwającą elementy z drzewa o wartości większej od tej podanej jako drugi parametr. Nie bardzo wiem jak się za to zabrać, więc będę bardzo wdzięczny za pomoc.
0
0
Wyszukaj węzeł o wartości Liczba (albo miejsce gdzie powinien być gdyby istniał) a następnie wywal całe prawe poddrzewo takiego węzła.
Czemu? Bo na prawo zawsze masz wartości większe niż ta węźle.
0
Zrobiłem tak jak mówiłeś i znalazłem ten element.
Moja funkcja do usuwania drzewa wygląda tak:
void UsunDrzewo (ElementDrzewa * Korzen) {
ElementDrzewa *pom;
if (Korzen) {
UsunDrzewo (Korzen->Lewo);
UsunDrzewo (Korzen->Prawo);
pom=Korzen;
Korzen=NULL;
delete pom;
}
}
i chciałem ją wywołać w ten sposób:
UsunDrzewo(ZnajdzWezel(Drzewo,5)->Prawo);
lecz wtedy wywala błąd.
0
Problem rozwiązany. Wyzeorwałem wskaźnik na prawy element i jest ok.
0
Weź pod uwagę co się stanie jeśli elementu o kluczu 5 nie będzie w drzewie...