Mi è stato dato due alberi binari di ricerca. Ad esempio, A e B. In seguito, mi è stato chiesto di eliminare l'albero B dall'albero A.
Con la cancellazione, intendo eliminare tutti i nodi presenti in B da A. Nota: B non è necessariamente una sottostruttura di A.
es:
A:
50 / \ 10 75 / / \ 1 60 90
B:
10 / \ 1 75
albero risultante dovrebbe essere:
50 \ 60 \ 90
Due approcci sono venute in mente:
A1:
nodo * deleteTree (nodo * A, il nodo * B);
La radice dell'albero B. Eliminare questo nodo dall'albero A (da normale metodo di eliminazione BST). Successiva dividere il problema in due parti - per sottoalbero sinistro di B e sottoalbero destro di B. Per ciascuna della sottostruttura, recurse. Per il sottoalbero sinistro, il nodo che occupava il nodo che è stato eliminato dovrebbe servire come la radice per l'albero A. Per il sottoalbero destro, il successore simmetrico del nodo cancellato dovrebbe server come root per l'albero A.
A2: L'altro approccio è un po 'strano. Trovo l'ordine simmetrico e preordine attraversamento dell'albero A. Trovare ed eliminare tutti i nodi dell'albero B usando la ricerca binaria con la ricorsione (noi non modificare il preordine). Infine recostruct nostro BST dal inorder (restante) e il preordine (invariato).
Prob A: trovare un modo efficiente per BST.
Prob B: trovare un modo efficace per qualsiasi albero binario (non solo BST).













