Ein binär verketteter Suchbaum heißt AVL-Baum, wenn für jeden Knoten gilt, dass sich die Höhen des linken und rechen Teilbaums um maximal 1 unterscheiden:
AVL-Eigenschaft (AVL-Balancierung):
Balance
Die Balance ist der Betrag der Höhendifferenz zwischen dem rechten Teilbaum und dem linken Teilbaum. Existiert ein Teilbaum nicht, wird
Beispiel
graph TB 1[-1] 2[1] 4[1] 6[0] 5[0] 3[-1] 7[1] 8[-1] 11[-1] 9[0] 10[0] 12[0] 1-->2 & 3 2-->4 & 5 4-->6 3-->7 & 8 7-->9 8-->10 & 11 11-->12
Höhe von AVL-Bäumen
Sei
Operationen und Laufzeiten
Suche
- Die Laufzeit der Suche lässt sich aus der Maximalhöhe ableiten
- BC
- WC/Misserfolg/AC
Einfügen
- Schafft man es, beim Einfügen und Löschen die AVL-Eigenschaft in konstanter Zeit wiederherzustellen, reduziert sich die Laufzeit hier auch auf die Suche
- Idee:
- Die Höhe des jeweiligen Teilbaums wird in den Knoten gespeichert
- Höhen werden beim Einfügen bzw. löschen aktualisiert
- Die AVL-Eigenschaft wird an allen Knoten bis zur Wurzel überprüft
- Ggf. durch Rotationen wiederhergestellt
Löschen
Das Löschen erfolgt fast gleich wie bei normalen Binärbäumen mit einem Sonderfall: Der zu löschende Knoten hat 2 Nachfolger. Dann wird wie folgt verfahren:
- Tauschen des zu löschenden Elements mit dem In-order-Nachfolger
- Der Knoten ist an seiner neuen Position zu löschen (erneut den Algorithmus aufrufen)
Rotationen
Rotationen werden an einem Knoten durchgeführt, wenn bei ihm die AVL-Eigenschaft verletzt ist.
| Ist der… | …linkte Teilbaum zu hoch und… | …rechte Teilbaum zu hoch und… |
|---|---|---|
| …davon der rechte Teilbaum höher: | Links-Rechts-Rotation | Links-Rotation |
| …davon der linke Teilbaum höher: | Rechts-Rotation | Rechts-Links-Rotation |
Einfachrotationen
Einfachrotationen werden durchgeführt, wenn der äußere Teilbaum zu hoch ist.
Links-Rotation
Beispiel einer Links-Rotation am Element 2:
graph TB 2-->1 & 4 4-.->3 4-->5 5-->...
Das innere Kindelement wird umgehängt:
graph TB 4-->2 & 5 2-->1 2==>3 5-->...
Rechts-Rotation
Beispiel einer Rechts-Rotation am Element 4:
graph TB 4-->2 & 5 2-->1 2-.->3 1-->...
Das innere Kindelement wird umgehängt:
graph TB 2-->1 & 4 4==>3 4-->5 1-->...
Doppelrotationen
Doppelrotationen werden durchgeführt, wenn der innere Teilbaum zu hoch ist. Sie bestehen aus zwei Einfachrotationen, was auch algorithmisch so umsetzbar ist.
Doppelrotationen rotieren zuerst einen Teilbaum, dann sich selbst.
Rechts-Links-Rotation
Beispiel einer Rechts-Links-Rotation am Element 2:
graph TB 2-->1 & 5 5-->4 & 6 4-->...
Es erfolgt eine Rechts-Rotation am rechten Teilbaum mit anschließender Links-Rotation am Element:
graph TB 4-->2 & 5 5-->6 2-->1 & ...
Links-Rechts-Rotation
Beispiel einer Rechts-Links-Rotation am Element 2:
graph TB 5-->6 5-->2 2-->1 & 3 3-->...
Es erfolgt eine Links-Rotation am rechten Teilbaum mit anschließender Rechts-Rotation am Element:
graph TB 3-->2 & 5 2-->1 5-->... & 6