Dostal jsem dva binární vyhledávací stromy. Například A a B. Dále jsem byl požádán o odstranění stromu B ze stromu A.
Delecí, myslím odstranit všechny uzly, které jsou v B z A. Poznámka: B není nutně podstromu A.
například:
A:
50 / \ 10 75 / / \ 1 60 90
B:
10 / \ 1 75
Výsledný strom by měl být:
50 \ 60 \ 90
Oba tyto přístupy mě napadlo:
A1:
node * deleteTree (node * A, uzel * B);
Vezměte kořen stromu B. Odstranění tohoto uzlu ze stromu A (podle obvyklé metody BSt vypouští se). Vedle rozdělit problém na dvě části - na levém podstromu B a pravého podstromu B. Pro každou z podstromu, recurse. V levém podstromu je uzel, který zabíral uzel, který byl odstraněn by měl sloužit jako kořen stromu pro A. Pro správnou podstromu na nezbytného nástupce odstraněného uzlu by serveru jako kořen stromu pro A.
A2: Druhý přístup je trochu divný. Zjistil jsem, nezbytného a preorder traversal stromu A. Najít a odstranit všechny uzly stromu B pomocí binárního vyhledávání spolu s rekurze (nemáme modifikovat preorder). Nakonec recostruct naší BST z nezbytného (zbývající) a předobjednávku (beze změny).
Prob A: najít účinný způsob, jak BST.
Prob B: najít efektivní způsob, jak pro jakýkoli binární strom (ne jen BST).













