I dano dwa drzewa binarne wyszukiwania. Na przykład, A i B. Następnie poproszono mnie, aby usunąć drzewa B z drzewa A.
Przez usunięcie, to znaczy usunięcie wszystkich węzłów znajdujących się w B z A. Uwaga: B niekoniecznie jest poddrzewo A.
np:
A:
50 / \ 10 75 / / \ 1 60 90
B:
10 / \ 1 75
Powstały drzewo powinno być:
50 \ 60 \ 90
Dwa podejścia przyszedł do mojego umysłu:
A1:
węzeł * deleteTree (węzeł * A, węzeł B *);
Zapoznaj się z korzenia drzewa B. Usunąć ten węzeł z drzewa A (według normalnego sposobu usunięcia BST). Następny problem podzielić na dwie części - dla lewego poddrzewa B i prawego poddrzewa B. Dla każdego poddrzewa, recurse. Dla lewego poddrzewa, węzeł, który zajęty węzeł, który został usunięty, powinien służyć jako korzeń dla drzewa A. Na prawym poddrzewie, następca Inorder usuniętego węzła powinien serwer jako korzeń dla drzewa A.
A2: Drugie podejście jest trochę dziwne. Uważam, że Inorder i preorder Przechodzenie drzewa A. Znajdź i usuń wszystkie węzły w drzewie B stosując wyszukiwanie binarne wraz z rekursji (my nie modyfikować zamĂłwienia przedpremierowego). Wreszcie recostruct naszą BST z Inorder (pozostały) i przedsprzedaży (bez zmian).
Prob A: znalezienie skutecznego sposobu na BST.
Prob B: znalezienie skutecznego sposobu na każdym drzewie binarnym (nie tylko BST).













