AVL-Bäume Balancierte Binärbäume Dieser Binärbaum ist

Werbung
AVL-Bäume
Balancierte Binärbäume
12
3
22
1
0
10
7
17
14
26
20
Dieser Binärbaum ist balanciert, weil bis zur Tiefe 3 alle nur
denkbaren Plätze für Knoten besetzt sind und nur in Tiefe 4
Lücken sind.
Ein balancierter Binärbaum ist ideal zum Suchen, weil dort der
Suchaufwand wirklich nur O(log n) beträgt. Allerdings ist es
aufwendig, den Binärbaum beim Einfügen und Löschen immer
balanciert zu halten. Wir brauchen darum andere Konzepte.
AVL-Bäume
12
-1
3
22
-1
1
10
17
26
0
1
0
14
0
Nachdem vier Knoten gelöscht wurden, ist der Binärbaum
nicht mehr balanciert, denn auf Tiefe 3 fehlt ein Knoten,
obwohl es auf Tiefe 4 einen Knoten gibt.
Es liegt aber ein AVL-Baum vor. Denn die Differenz zwischen
der Höhe des linken Teilbaums und der Höhe des rechten
Teilbaums ist (betragsmäßig) immer höchstens 1.
Auch im AVL-Baum ist der Suchaufwand höchstens O(log n).
Rotationen
L
K
RotRechts
K
III
I
II
RotLinks
L
I
II
III
Wenn beim Einfügen oder Löschen die AVL-Bedingung verletzt
wird, kann man sie mit Hilfe der Rotation nach rechts und der
Rotation nach links schnell wiederherstellen.
Der Baum bleibt dabei ein Suchbaum, denn:
Im Teilbaum I sind stets die Knoten, die kleiner als K sind.
Im Teilbaum III sind stets die Knoten, die größer als L sind.
Im Teilbaum II sind stets die Knoten zwischen K und L.
Einfügebeispiel (1)
12
3
22
10
17
14
26
2
0
14
13
17
1
0
0
13
0
In unserem Beispiel fügen wir die 13 in den AVL-Baum ein.
Dann ist die AVL-Bedingung bei der 17 verletzt.
Dies beheben wir durch eine Rotation nach rechts.
Einfügebeispiel (2)
12
3
22
10
17
15
26
2
0
14
15
14
17
-1
0
0
15
0
Hier fügen wir die 15 in den AVL-Baum ein.
Dann ist wieder die AVL-Bedingung bei der 17 verletzt.
Allerdings hat hier der Knoten davor eine AVL-Balance mit
anderem Vorzeichen. Wir brauchen darum eine Doppelrotation,
um die AVL-Bedingung wiederherzustellen:
zuerst eine Rotation nach links
und dann eine Rotation nach rechts.
Aufwand
Sowohl beim Einfügen als auch beim Löschen kann es im
schlimmsten Fall passieren, dass wir auf dem gesamten Weg
zurück zur Wurzel Rotationen durchführen müssen, um die
AVL-Bedingung wiederherzustellen. Der Aufwand für das
Einfügen und Löschen beträgt daher im schlimmsten Fall
O(log n).
Herunterladen