2016-03-23 11 views
0

In der Standard-Prozess der AVL-Tree-Insertion, nachdem wir einen neuen Knoten einfügen, werden wir Anpassung von unten nach oben tun, und während des Prozesses ist es möglich, eine Sub-Baum-Höhe um eins (wegen der Insertion und Rotation Operation), während der Unterbaum (nach der Höhe um eins zu erhöhen), immer noch die gleiche Höhe von links/rechts Kind? Wenn dem so ist, wird ein Beispiel geschätzt, und wenn nicht, wird es großartig sein, wenn irgendjemand es erklären könnte. Vielen Dank. :)über AVL Tree Insertion Operation

Hier ist ein Verweis auf AVL-Baum (https://en.wikipedia.org/wiki/AVL_tree)

Grüßen, Lin

+1

Können Sie genauer sein? – ferit

+0

@Saibot, Referenz des AVL-Baums hinzufügen. Ich denke, es ist nicht möglich für einen Baum um 1 zu erhöhen, während das Gleichgewicht (links/rechts) Kind die gleiche Höhe hat. Aber ich könnte mich irren, bitte zögern Sie nicht, Rat zu bekommen. Wenn meine Frage immer noch nicht klar ist, lassen Sie mich bitte wissen, welche Teile nicht klar sind. Vielen Dank. :) –

+1

(Kurze Antwort: Nicht möglich. Eine Drehung wird verwendet, wenn ein größerer Unterbaum in der Höhe zunimmt und einen Unterbaum der ursprünglichen Höhe ergibt. Um die Höhe der Geschwister-Unterbäume zu erhöhen, fügen Sie mehr als einen Knoten ein.) Bitte definieren Sie Namen für die beteiligten Knoten und Bäume, wie in _ ..., können beide Unterbäume_ l _und_ r _von einem Knoten_ a _ _. – greybeard

Antwort

1

Nach dem Einfügen ist es nicht möglich, dass das linke und rechte Kind des Unterbaums bei einer Höhenänderung gleich bleibt.

Betrachten wir ein einfaches Beispiel mit nur < 3 Knoten in einem Unterbaum. Die Möglichkeiten des Ausgleichsfaktors sind,

  • +1 - und das ist der Startknoten in Unterbaum mit 1 Linksem Kind und kein rechtes Kind
  • -1 - der Wurzelknoten in Teilbaum mit 1 rechtsem Kind und kein linken Kind
  • 0 - Root-Knoten in Teilbaum hat 1 Knoten in Right und Left.

Für SubTree Ausgewogene Faktor +1,

  • , wenn wir in den rechten einsetzen, sind wir
  • in Ordnung, wenn wir in den linken legen wir die Balance Änderungen 2. So müssen um den Baum auszugleichen, in welchem ​​Fall die Höhe des Teilbaums geändert wird.

Für SubTree Ausgewogene Faktor -1,

  • , wenn wir in den linken legen sind wir ok
  • , wenn wir in den rechten einfügen, den Ausgleichsfaktor Änderungen -2. Also müssen wir den Baum ausbalancieren, in welchem ​​Fall die Höhe des Teilbaums geändert wird.

Für SubTree Ausgewogene Faktor 0,

  • , wenn wir in den linken einsetzen, sind wir ok. Die Höhe wird geändert, aber der untergeordnete Knoten wird ebenfalls geändert.
  • Wenn wir in das Recht einfügen, sind wir in Ordnung. Die Höhe wird geändert, aber der untergeordnete Knoten wird ebenfalls geändert.

So ist es nicht möglich, die Höhe geändert zu haben und immer noch die gleiche rechte und linke Kindhöhe zu haben.

+1

(Diese Antwort leidet unter dem gleichen Problem wie die Frage: Jeder Knoten in einem Baum kann als Wurzel eines Unterbaums betrachtet werden. Ohne Identifizierungsknoten (mit den zusätzlichen Informationen vor oder nach einer Änderung, die die Wurzel eines Knotengruppe) oder, äquivalent, Unterbäume, die Rede von 'der Teilbaum' ist völlig mehrdeutig.) – greybeard

+1

Sie können den in der Antwort erklärten Teilbaum als ganzen Baum verwenden. Das Konzept bleibt unverändert, und Sie können die Höhe des untergeordneten Knotens nicht ändern, wenn Sie die Höhe ändern. Wenn Sie sich unterscheiden, geben Sie bitte ein Beispiel an, in dem Sie beweisen können, dass die Höhe des Wurzelknotens geändert werden kann und die Höhen des linken und rechten Kindes weiterhin intakt bleiben. –

+0

@AshraffAliWahab, nette Antwort, vote up. Was ist Ihre genaue Definition von intakt, meinen Sie die gleiche Höhe von linken und rechten Kind? Oder meinen Sie den ursprünglichen Balance-Faktor (-1, 0 oder +1)? –

4

Von Wikipedia Binary Tree page:

Eine ausgewogene Binärbaum hat die minimal mögliche maximale Höhe (aka Tiefe) für die Blattknoten, da für jede gegebene Anzahl von Blattknoten die Blattknoten in der größtmöglichen Höhe angeordnet sind.

Eine gemeinsame ausgeglichene Baumstruktur eine binäre Baumstruktur, in der die linken und rechten Teilbäume von jedem Knoten in der Höhe unterscheiden sich um nicht mehr als 1

Zum Beispiel:

Dies ist ein ausgewogener Baum.

enter image description here

Und wenn wir 1 Einsatz ist es Höhe erhöht sich um 1. Es ist jedoch ein ausgeglichener Baum wieder. Da links und rechts Teilbäume in der Höhe unterscheiden sie nicht mehr als 1.

enter image description here

BTW, ist AVL-Baum ein Balancierter Baum. Es ist also nicht möglich, nach dem Einsetzen das Gleichgewicht zu verlieren. Denn nach jeder Insertion balanciert der Baum sich selbst aus, indem er notwendige Rotationen vornimmt.

Ich denke, Sie verwenden den Begriff ausgeglichen falsch. Sie betrachten ausgeglichen als keinen Höhenunterschied, aber es ist höchstens 1 Höhenunterschied in der Definition.

Ihre Frage:

In dem Standardverfahren der AVL-Baum Insertion, ist es möglich, ein Teilbaumhöhenzunahme durch eine (aufgrund der Insertion und Rotationsoperation), während des Unterbaumes (nach Höhe um eins erhöhen), haben immer noch die gleiche Höhe von links/rechts Kind?

Wenn wir würden einen Baum haben, die die gleiche Höhe von linken und rechten Zweige hat, und wenn wir einen Knoten in einem Blattknoten auf dem linken Zweig einsetzen würde, würde Höhe erhöhen, weil Höhe des Baumes maximum(height(left_branch, right_branch)) ist. Denn nach dieser Operation ist height(left_branch) gleich height(right_branch)+1. Sie können also nicht gleich sein.

Kurz gesagt, Ihre Voraussetzung ist height(left_branch) == height(right_branch)

Ihr Betrieb ist increasing height of left_branch by 1

So height(left_branch) == height(right_branch) Bedingung nicht mehr wahr sein kann.

+1

Danke Saibot, Stimme ab. Ja, wenn ich Balance sage, meine ich, ob es möglich ist, die gleiche Höhe des linken und rechten Teilbaums zu haben. Eigentlich ist meine Frage, ist es in der Standard-Prozess der AVL-Tree-Insertion, ist es möglich, eine Sub-Baum Höhe um eins zu erhöhen, während der Unter-Baum (nach Höhe um eins erhöhen), immer noch die gleiche Höhe von links/rechts Kind? Ihr Rat wird geschätzt und ich werde meine ursprüngliche Frage auch korrigieren. :) –

+1

@LinMa Lassen Sie mich wissen, wenn diese Erklärung nicht genug für Sie ist, in diesem Fall kann ich Beispiele bereitstellen. – ferit

+0

Danke Saibot für die Details und stimmen auf. :) Für Ihre Kommentare, "Wenn wir einen Baum haben würden, der die gleiche Höhe von linken und rechten Ästen hat", denke ich, dass hier ein Problem für die Annahme besteht. Vor dem Einfügen des Knotens könnte der Baum entweder linkes Kind höher als das rechte Kind sein oder umgekehrt, außerdem ausgeglichen. Also, ich denke, Ihre Analyse basierend auf dieser Annahme ist nicht 100% richtig. Ich könnte mich irren und bitte fühlen Sie sich frei, mich zu korrigieren. –