Löschen (im Allgemeinen) nicht kommutativ. Hier ist ein Gegenbeispiel:
4
/ \
3 7
/
6
Was passiert, wenn wir 4 löschen und dann 3?
Wenn wir 4 löschen, erhalten wir 6 als neue Wurzel:
6
/ \
3 7
3 Löschen nicht den Baum ändern, sondern gibt uns dies:
6
\
7
Was passiert, wenn wir 3 löschen und dann 4?
Wenn wir 3 Löschen der Baum nicht ändert:
4
\
7
/
6
Wenn wir jedoch nun 4 löschen, die neue Wurzel wird 7:
7
/
6
Die beiden resultierenden Bäume sind nicht die gleichen, deshalb Löschung nicht kommutativ ist.
AKTUALISIEREN
Ich lese nicht die Einschränkung, dass dies, wenn Sie immer einen Knoten mit 2 Kindern löschen. Meine Lösung ist für den allgemeinen Fall. Ich werde es aktualisieren, wenn / wenn ich ein Gegenbeispiel finden.
UPDATE ANOTHER
Ich habe keine konkreten Beweise, aber ich werde eine Vermutung zu wagen:
Im allgemeinen Fall behandeln Sie Löschungen unterschiedlich je nachdem, ob Sie haben zwei Kinder, ein Kind, oder keine Kinder. Im Gegenbeispiel I vorgesehen ist, lösche ich zuerst einen Knoten mit zwei Kindern und dann ein Knoten mit einem Kind. Danach, lösche ich einen Knoten ohne Kinder und dann einen anderen Knoten mit einem Kind.
Im speziellen Fall von nur Knoten mit zwei Kindern zu löschen, mögen Sie den Fall betrachten, wo beide Knoten in dem gleichen Unterbaum sind (da sie nicht, wenn sie in verschiedenen Teilbäumen sind, würden egal, man kann sicher sein, dass die Gesamtstruktur nicht in der Größenordnung des Löschens basierend ändern). Was Sie wirklich unter Beweis stellen müssen, ist, ob die Reihenfolge der Löschung von Knoten in dem gleichen Unterbaum, wobei jeder Knoten zwei Kinder hat, Angelegenheiten.
Betrachten wir zwei Knoten A und B, wobei A ein Vorfahre von B ist, dann können Sie noch die Frage verfeinern zu sein:
Ist Löschen kommutativ, wenn Sie die Löschung von zwei Knoten von einem binären Suchbaum erwägen, die eine Vorfahr-Nachkommen Beziehung zueinander haben (dies würde bedeuten, dass sie in dem gleichen Unterbaum sind)?
Wenn Sie einen Knoten löschen (sich A sagt), können Sie den richtigen Unterbaum durchqueren das kleinste Element zu finden. Dieser Knoten wird ein Blattknoten sein und kann nie zu B gleich sein (weil B hat zwei Kinder und kann kein Blattknoten sein). Sie würden dann mit dem Wert dieses Blattknoten den Wert von A ersetzen. Was dies bedeutet ist, dass die einzige strukturelle Veränderung an den Baum mit dem Wert des Blattknoten, und der Verlust des Blattknoten den Ersatz von A Wert ist.
Der gleiche Prozess wird für B. beteiligt Das heißt, der Wert des Knotens ersetzen und einen Blattknoten ersetzen. So im Allgemeinen, wenn Sie einen Knoten mit zwei Kindern löschen, die einzigen strukturellen Veränderungen ist die Wertänderung des Knotens Sie löschen und das Löschen des Blattknotens , wen Wert , den Sie als Ersatz verwenden .
Die Frage ist also weiter verfeinert:
Können Sie garantieren, dass Sie immer den gleichen Ersatzknoten der Reihenfolge der Löschung unabhängig erhalten (wenn Sie immer einen Knoten mit zwei Kindern zu löschen)?
Die Antwort (glaube ich) ist ja. Warum? Hier sind ein paar Beobachtungen:
- Angenommen , Sie haben den Nachkomme Knoten löschen ersten und den Vorfahrenknoten Sekunde. Der Unterbaum, der modifiziert wurde , wenn Sie den Nachkommen Knoten gelöscht ist nicht im linken Unterbaum der rechten Kindes Vorfahrenknoten. Dies bedeutet , dass dieser Teilbaum bleibt unberührt. Was dies bedeutet auch, unabhängig von der Reihenfolge des Löschens, zwei verschiedene Unterbäume modifiziert sind und daher ist der Betrieb kommutativ.
- Ersten und den Vorfahrenknoten zweiten wieder, sagen wir , Sie den Nachkomme Knoten löschen. Der Unterbaum, der modifiziert wurde , wenn Sie den Nachkommen Knoten gelöscht ist im linken Unterbaum der rechten Kindes Vorfahrenknoten. Aber auch hier gibt es keine Überschneidungen. Der Grund dafür ist , wenn Sie den Nachkommen Knoten zuerst löschen, Sie an dem linken Unterbaum des Nachkommen Knotens aussehen rechtsen Kindes. Wenn Sie dann den Vorfahrenknoten löschen, werden Sie nie , dass Unterbaum nach unten gehen , da Sie immer nach links gehen , nachdem Sie den Vorfahrenknoten des rechten Kindes linken Unterbaum ein. Also noch einmal, unabhängig davon , was löschen Sie zuerst modifizieren Sie verschiedene Unterbäume und so scheint es , um keine Rolle spielt.
- Ein anderer Fall ist , wenn Sie den Vorfahrenknoten zuerst löschen und Sie feststellen , dass der minimale Knoten ein Kind des Nachkommen Knoten ist. Dies bedeutet , dass der Abkömmling Knoten mit einem Kind am Ende wird, und das Löschen von einem Kind ist trivial. Betrachten wir nun den Fall, dass in diesem Szenario Sie Nachkomme Knoten zuerst gelöscht. Dann würden Sie den Wert des Nachkommen Knoten mit dem rechten Kind ersetzen und dann das richtige Kind löschen. Wenn Sie dann den Vorfahrenknoten löschen, beenden Sie die Suche auf gleiche Mindest Knoten (die alte linke Kind des gelöschten Knoten, die auch das linke Kind ersetzt Knoten). So oder so, am Ende mit der gleichen Struktur auf.
Dies ist kein strenger Beweis; Dies sind nur einige Beobachtungen, die ich gemacht habe. Mit allen Mitteln, fühlen sich frei, Löcher zu stecken!