Übersicht Binäre Suchbäume • Einführung • Operationen auf binären Suchbäumen Datenstrukturen & Algorithmen Matthias Zwicker Universität Bern Frühling 2009 2 Binäre Suchbäume Binäre Suchbäume • Unterstützen mehr Operationen auf dynamischen Mengen • Viele Varianten von Suchbäumen – Binäre Suchbäume, rot-schwarz Bäume, AVL Bäume, B-Bäume, etc. – Wörterbuchoperationen (suchen, einfügen, löschen) – Prioritätswarteschlangen o tätswa tesc la ge (Minimum, (M u , Maximum) Ma u ) – Sortierte Auflistung (Vorgänger, Nachfolger) • Heute: grundlegende Operationen auf binären Suchbäumen – – – – • Aufwand proportional zur Höhe des Baumes – Höhe zwischen Θ(n) und Θ(lg n) Traversierung Abfragen Einfügen Löschen 3 4 Binäre Suchbäume Binäre Suchbaum-Eigenschaft • Verkettete Struktur wie vor 2 Wochen • Falls Knoten y im linken Teilbaum von Knoten x, dann key[y]<=key[x] class BinaryNode { BinaryNode left, right, p; int key; } • Falls Knoten y im rechten Teilbaum von Knoten x, dann key[y]>=key[x] 5 6 1 Traversierung Inorder Traversierung • Inorder Traversierung besucht Knoten in aufsteigender Reihenfolge • Korrektheit: folgt mittels Rekursion aus Suchbaum-Eigenschaft • Zeitaufwand: Linear, jeder Knoten wird genau einmal besucht und ausgegeben 7 Alternative Reihenfolgen 8 Suchen • Inorder-Traversierung: traversiere linken Teilbaum, gib Knoten aus, traversiere rechten Teilbaum • Preoreder-Traversierung: gibt Knoten aus, traversiere linken Teilbaum, Teilbaum traversiere rechten Teilbaum • Postorder-Traversierung: traversiere linken Teilbaum, traversiere rechten Teilbaum, gib Knoten aus 9 10 Suchen Minimum • Überprüfte Knoten bilden Pfad von Wurzel nach unten • Aus Suchbaum-Eigenschaft folgt – Kleinster Knoten ist Knoten am weitesten links – Grösster Knoten ist Knoten am weitesten rechts • Laufzeit höchstens O(h) • Iterative Variante, ähnlich wie Traversierung einer Liste 11 12 2 Vorgänger und Nachfolger Nachfolger • Vorgänger von Element x – Element mit grösstem Schlüssel der kleiner ist als x • Nachfolger von Element x – El Elementt mit it kleinstem kl i t Schlüssel S hlü l d der grösser ö iistt als x • Kann gefunden werden ohne Schlüsselvergleiche! 13 14 Zusammenfassung Einfügen und Löschen • Operationen Suchen, Minimum, Maximum, Vorgänger und Nachfolger können auf Binärbaum der Höhe h in O(h) ausgeführt werden • Einfügen und Löschen ändern die Struktur des Suchbaumes • Müssen sicherstellen, das Suchbaum Eigenschaft wieder hergestellt wird • Grund: Alle Operationen folgen entweder einem strikt aufwärts oder abwärts laufenden Pfad im Baum • Einfügen einfacher als Löschen 15 Einfügen 16 Einfügen 17 3 Einfügen Löschen • Laufzeit O(h), wie Suchen 3 Fälle: Lösche Knoten z 1. Fall: Knoten z hat keine Kinder • Einfügen und Inorder-Traversierung können als Sortieralgorithmus verwendet werden – Lösche Knoten z indem Vater von z auf nil zeigt anstatt auf z 2. Fall: Knoten z hat ein Kind – Vater V t von K Knoten t z zeigt i t auff Ki Kind d von z anstatt t tt auff z 3. Fall: Knoten z hat zwei Kinder – Achtung: Der Nachfolger y von z hat entweder keines oder nur ein rechtes Kind (Nachfolger von z bedeutet der linkste Knoten im Rechten Teilbaum von z) – Lösche y via Fall 1 oder 2 – Ersetze Schlüssel und Satellitendaten von z mit denjenigen von y 19 Löschen 20 Löschen 21 22 Zusammenfassung Nächstes Mal • Alle Operationen laufen mit Aufwand Θ(h) • Rot-schwarz Bäume • Problem – Im Worst Case degeneriert Baum zu einer Liste – Höhe ist von Ordnung Θ(h) = Θ(n) • Lösung – Garantiere kleine Höhe – Balancierte Bäume, so dass immer Θ(h) = lg n • Ansatz – Restrukturiere Baum falls nötig nach Einfügen und Löschen 23 24 4