J'ai donné deux arbres binaires de recherche. Par exemple, A et B. Ensuite, on m'a demandé de supprimer l'arbre B de l'arbre A.
Par suppression, je veux dire supprimer tous les noeuds présents dans B de A. Note: B est pas nécessairement une sous-arborescence de A.
par exemple:
A:
50 / \ 10 75 / / \ 1 60 90
B:
10 / \ 1 75
arbre résultant devrait être:
50 \ 60 \ 90
Deux approches sont venus à l' esprit:
A1:
noeud * deleteTree (noeud * A, noeud * B);
Prendre la racine de l' arbre B. supprimer ce noeud d'arbre A (par la méthode de suppression normale BST). Diviser ensuite le problème en deux parties - pour le sous - arbre gauche de B et le sous - arbre droit de B. Pour chacun des sous - arbre, récursion. Pour le sous - arbre gauche, le nœud qui occupait le noeud qui a été supprimé devrait servir de racine pour arbre A. Pour le sous - arbre droit, le successeur de envue du nœud supprimé doit serveur comme la racine pour l' arbre A.
A2: L'autre approche est un peu bizarre. Je trouve le afinde et pré-commande de l'arbre A. traversal Trouver et supprimer tous les noeuds dans l'arbre B en utilisant la recherche binaire avec récursion (nous ne modifier le pré-commande). Enfin recostruct notre bst du afinde (restant) et la pré-commande (inchangé).
PROB A: Trouver un moyen efficace pour BST.
Prob B: Trouver un moyen efficace pour tout arbre binaire (non seulement BST).













