Am fost dat doi arbori de căutare binare. De exemplu, A și B. Apoi, am fost rugat să ștergeți copac B din copac A.
Prin ștergere, vreau să spun șterge toate nodurile prezente în B de la A. Notă: B nu este în mod necesar un subarbore de A.
de exemplu:
A:
50 / \ 10 75 / / \ 1 60 90
B:
10 / \ 1 75
Rezultând copac ar trebui să fie:
50 \ 60 \ 90
Două abordări a venit în minte:
A1:
nod * deleteTree (nod * A, nodul B *);
Ia rădăcina arborelui B. Ștergeți acest nod din arbore A (prin metoda normală de ștergere BST). În continuare împărți problema în două părți - pentru subarborele stâng al lui B și subarborele drept al B. Pentru fiecare dintre subramificație, recurse. Pentru subarborele stâng, nodul care a ocupat nodul care a fost șters ar trebui să servească drept rădăcină pentru copac A. Pentru subarborelui drept, succesorul inordine al nodului șters ar trebui ca serverul rădăcină pentru copac A.
A2: Cealaltă abordare este un pic ciudat. Am găsi inordine si precomandă traversal arborelui A. Găsiți și șterge toate nodurile din arborele B utilizând binar de căutare, împreună cu recursivitate (noi nu modifica precomanda). În cele din urmă recostruct BST nostru din Inorder (rămase) și precomanda (neschimbat).
Prob A: Găsiți un mod eficient pentru BST.
Prob B: Găsiți un mod eficient pentru orice arbore binar (nu doar BST).













