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).