La suppression (en général) n'est pas commutative. Voici un contre:
4
/ \
3 7
/
6
Et si nous supprimons 4 et 3?
Lorsque nous supprimons 4, nous obtenons 6 comme la nouvelle racine:
6
/ \
3 7
La suppression 3 ne change pas l'arbre, mais nous donne ceci:
6
\
7
Et si nous supprimons 3 et 4?
Lorsque l'on supprime l'arbre 3 ne change pas:
4
\
7
/
6
Cependant, lorsque nous supprimons maintenant 4, la nouvelle racine devient 7:
7
/
6
Les deux arbres résultants ne sont pas les mêmes, par conséquent la suppression n'est pas commutative.
METTRE À JOUR
Je ne l'ai pas lu la restriction que ce soit lorsque vous supprimez toujours un nœud avec 2 enfants. Ma solution est pour le cas général. Je mettrai à jour si / quand je peux trouver un contre-exemple.
une mise à jour
Je n'ai pas la preuve concrète, mais je vais hasarder une hypothèse:
Dans le cas général, vous gérez les suppressions différemment selon que vous avez deux enfants, un enfant ou pas d'enfant. Dans le contre-exemple, je fourni, je d'abord supprimer un nœud avec deux enfants, puis un nœud avec un enfant. Après cela, je supprime un noeud sans enfant, puis un autre nœud avec un enfant.
Dans le cas particulier de ne supprimer des nœuds avec deux enfants, vous voulez examiner le cas où les deux noeuds sont dans le même sous-arbre (car il ne serait pas grave si elles sont en sous-arbres différents, vous pouvez être sûr que le structure globale ne changera pas en fonction de l'ordre de suppression). Qu'est-ce que vous avez vraiment besoin de prouver est de savoir si l'ordre de suppression de nœuds dans le même sous-arbre, où chaque noeud a deux enfants, les questions.
Considérons deux nœuds A et B où A est un ancêtre de B. Ensuite, vous pouvez affiner davantage la question à:
Est-commutative de suppression lorsque vous envisagez la suppression de deux nœuds d'un arbre de recherche binaire qui ont une relation descendante ancêtre de l'autre (cela implique qu'ils sont dans le même sous-arbre)?
Lorsque vous supprimez un nœud (disons A), vous traversez le sous-arbre droit de trouver l'élément minimum. Ce nœud sera un nœud feuille et ne peut jamais être égale à B (parce que B a deux enfants et ne peut pas être un nœud feuille). Vous pouvez ensuite remplacer la valeur de A avec la valeur de cette feuille-nœud. Ce que cela signifie est que le seul changement structurel de l'arbre est le remplacement de la valeur de A avec la valeur de la feuille nœud, et la perte de la feuille nœud.
Le même processus est impliqué pour B. C'est, vous remplacez la valeur du nœud et de remplacer un nœud feuille. Donc , en général, lorsque vous supprimez un nœud avec deux enfants, le seul changement structurel est la variation de valeur du nœud que vous supprimez, et la suppression du nœud feuille qui est la valeur que vous utilisez en remplacement .
La question est plus raffinée:
Pouvez-vous garantir que vous obtiendrez toujours le même nœud de remplacement quel que soit l'ordre de suppression (lorsque vous supprimez toujours un nœud avec deux enfants)?
La réponse (je pense) est oui. Pourquoi? Voici quelques observations:
- Disons que vous supprimez le nœud descendant premier et le noeud ancêtre seconde. Le sous-arbre qui a été modifié lorsque vous avez supprimé le nœud descendant est pas dans le sous-arbre gauche de l' enfant droit du nœud ancêtre. Cela signifie que ce sous-arbre reste inchangé. Ce que cela veut dire aussi quel que soit l'ordre de suppression, deux différents sont modifiés sous-arbres et donc l'opération est commutative.
- Encore une fois, disons que vous supprimez le noeud descendant premier et le noeud ancêtre seconde. Le sous-arbre qui a été modifié lorsque vous avez supprimé le nœud descendant est dans le sous-arbre gauche de l' enfant droit du nœud ancêtre. Mais même ici, il n'y a pas de chevauchement. La raison en est lorsque vous supprimez le nœud descendant d' abord, vous regardez le sous-arbre gauche du noeud descendant droit enfant. Lorsque vous supprimez le nœud ancêtre, vous ne descendre que sous-arbre puisque vous serez toujours être allez vers la gauche après que vous entrez sous-arbre gauche du noeud ancêtre droit enfant. Donc , encore une fois, peu importe ce que vous supprimez d' abord vous modifiez les différents sous-arbres et il semble donc l' ordre n'a pas d' importance.
- Un autre cas est si vous supprimez le nœud ancêtre premier et vous trouvez que le nœud minimum est un enfant du nœud descendant. Cela signifie que le nœud descendant se termine avec un enfant, et la suppression de l'un enfant est trivial. Considérons maintenant le cas où , dans ce scénario, vous avez supprimé le nœud descendant en premier. Ensuite , vous remplacez la valeur du nœud descendant avec son enfant à droite, puis supprimer l'enfant droit. Ensuite , lorsque vous supprimez le nœud ancêtre, vous finissez par trouver le même noeud minimum (enfant gauche de l'ancien noeud supprimé, qui est aussi l' enfant gauche du nœud remplacé). De toute façon, vous vous retrouvez avec la même structure.
Ce n'est pas une preuve rigoureuse; ce ne sont que quelques observations que j'ai fait. Par tous les moyens, ne hésitez pas à percer des trous!