Niveau 0 Bäume (Nachtrag) Niveau 1 Definitionen ­ Elternelement: Vorgänger in Richtung Wurzel ­ Kindelement: Direkte Nachfolger ­ Blatt: Knoten/Elemente ohne Nachfolger ­ Teilbaum: Beliebiger Knoten und alle direkten und indirekten Nachfolger ­ Grad > eines Knotens: Anzahl der Kindelemente > eine Baums: Maximaler Knotengrad (hier drei) ­ Vielwegbaum: Baum mit Grad > 2 ­ Binärbaum: Baum mit Grad = 2 ­ Tiefe (eines Knotens): Länge des Pfads bis zur Wurzel (z.B. 2 für Knoten 7) ­ Niveau: Alle Knoten gleicher Tiefe ­ Höhe (eines Baums): Längster Pfad im Baum, größte Tiefe (hier 2) ­ Knoten: Elemente Niveau 2 1 Binäre Suchbäume ... sind binäre Bäume, bei denen sich im linken/rechten Teilbaum eines jeden Knotens nur kleinere/größere Elemente befinden. 2 Elemente in einen binären Suchbaum einsortieren a) 10, 5, 14, 7, 18, 12, 6 c) 5, 6, 7, 10, 12, 14, 18 10 5 14 5 12 7 6 7 18 6 10 Reihenfolge des Einfügens ist entscheidend 12 14 b) 5, 10, 7, 14, 12, 18, 6 18 ein zu einer linearen Liste entarterter binärer Suchbaum 5 10 7 6 14 12 18 3 1 1 -1 10 1 1 -1 1 höhenbilanziert nicht vollständig 2 5 2 -1 2 2 7 14 0 12 18 6 3 -1 2 1 voll => vollständig => höhenbilanziert Weitere Definitionen vollständiger voller Baum ­ Bilanz: Differenz der Höhen des rechten und linken Teilbaums Baum ­ Höhenbilanziert Baum: Baum, bei dem jede Bilanz 0, 1 oder ­1 ist ­ Vollständiger Baum: Baum, der auf jedem Niveau n < Höhe die maximale Knotenanzahl hat (auf allen Niveaus außer auf dem "untersten") ­ Voller Baum: Baum, der auf jedem Niveau die maximale Knotenanzahl hat 4 AVL­Baum ­ höhenbilanzierte Suchbäume ­ Adelson, Veliskii, Landis Rezept (Algorithmus) zum Einfügen von Elementen in AVL­Bäume 1) Einfügen wie bisher 2) Sofort auf Höhenbilanziertheit prüfen 3) Falls die Balance B < ­1 oder >+1, dann Sofort umstrukturien a) Linksrotation, falls B > 1 b) Rechtsrotation, falls B < ­1 c) Rechtlinksrotation, falls B > 1 und B(direkter Nachfolger) = ­1 ist d) Linksrechtsrotation, falls B < ­1 und B(direkter Nachfolger) = +1 ist 5 M F F A O H A F H M M A O C C Falls ein Knoten nicht höhenbilanziert ist (hier M) wird er nach links/rechts geschoben. Ein möglicher rechter/linker Nachfolger (hier H) wird linker/rechter Nachfolger des rotierten Knotens (hier M) H O C 6 5-8-2-6-10-9 Rezept (Algorithmus) zum Einfügen von Elementen in AVL­Bäume 1) Einfügen wie bisher 2) Sofort auf Höhenbilanziertheit prüfen 3) Falls die Balance B < ­1 oder >+1, dann Sofort umstrukturien a) Linksrotation, falls B > 1 b) Rechtsrotation, falls B < ­1 c) Rechtlinksrotation, falls B > 1 und B(Nachfolger) = ­1 ist d) Linksrechtsrotation, falls B < ­1 und B(Nachfolger) = +1 ist 5 1 2 5 2 8 -1 6 8 8 1 2 6 10 -1 9 8 0 5 2 6 05 10 9 2 10 6 -1 9 Ein möglicher linker Nachfolger (hier 6) wird rechter Nachfolger des rotierten Knotens (hier 5) 7 -2 5 1 5 7 2 7 4 2 4 1 5 2 3 1 3 7 4 1 3 1.Teilschritt: Linksrotation (um Nachfolger) 5 4 7 4 2 1 5 2 1 3 7 3 Rezept (Algorithmus) zum Einfügen von Elementen in AVL­Bäume 1) Einfügen wie bisher 2) Sofort auf Höhenbilanziertheit prüfen 3) Falls die Balance B < ­1 oder >+1, dann Sofort umstrukturien a) Linksrotation, falls B > 1 b) Rechtsrotation, falls B < ­1 c) Rechtlinksrotation, falls B > 1 und B(Nachfolger) = ­1 ist d) Linksrechtsrotation, falls B < ­1 und B(Nachfolger) = +1 ist 2. Teilschritt: Rechtsrotation (um "Problemknoten") 1, 7, 3, 4, 2, 6, 5 8 1-7-3-4-2-6-5 2 1 3 1 7 -1 3 3 1 3 7 -1 1 7 7 -2 1 4 1 2 4 1 6 1 3 3 1 7 2 6 4 1 1 6 -1 2 14 7 5 a) Linksrotation, falls B > 1 b) Rechtsrotation, falls B < ­1 c) Rechtslinksrotation, falls B > 1 und B(Nachfolger) ­1 ist d) Linksrechtsrotation, falls B < ­1 und B(Nachfolger) +1 ist 9 10