Institut für Kartographie und Geoinformation Diskrete Mathematik I Vorlesung 8 02.12.99 -Binärer Suchbaum II- Übersicht • Binärer Suchbaum – Suchen von Knoten – Löschen von Knoten (Wurzel) – Durchlaufstrategien • Preorder • Breitendurchlauf 2 Binärer Suchbaum • Ein binärer Baum B ist ein binärer Suchbaum, falls er leer ist oder die folgenden Eigenschaften erfüllt sind: – die beiden Unterbäume sind binäre Suchbäume – die Beschriftungen der Knoten des linken Suchbaums sind kleiner als die Beschriftung der Wurzel – die Beschriftungen des rechten Suchbaums sind größer als die Beschriftung der Wurzel n <n >n 3 Suchen von Knoten Suche einer Zahl k in einem binären Suchbaum B • B ist leer – k kann nicht im Baum sein. • B ist nicht leer – B.wert = k : k ist gefunden, d.h. bereits in B vorhanden. – B.wert < k : Suche im rechten Unterbaum von B. – B.wert > k : Suche im linken Unterbaum von B. 4 Löschen von Knoten (Wurzel) • Rechter Unterbaum ist unbesetzt 16 10 9 14 13 15 5 Löschen von Knoten (Wurzel) • Rechter Unterbaum ist unbesetzt Unterbaum bildet einen binären Baum 10 9 14 13 15 6 Löschen von Knoten (Wurzel) • Beide Unterbäume sind besetzt 16 10 24 9 14 13 18 15 7 Löschen von Knoten (Wurzel) • Beide Unterbäume sind besetzt Suchbaum zerfällt in zwei disjunkte Bäume Es muß eine neuer Knoten, der die Wurzel bildet, gefunden werden. 10 24 9 14 13 18 15 8 Löschen von Knoten (Wurzel) • Beide Unterbäume sind besetzt 16 10 24 9 14 13 18 Kriterien: Der Knoten muß größer sein, als die Wurzel des linken Unterbaums. Der Knoten muß kleiner sein als die Wurzel des rechten Unterbaums. 15 9 Löschen von Knoten (Wurzel) • Beide Unterbäume sind besetzt 16 10 24 9 14 13 18 15 Kandidaten 10 Löschen von Knoten (Wurzel) • Beide Unterbäume sind besetzt 15 10 24 9 14 18 13 11 Durchlaufstrategien • Preorder – Die Wurzel wird vor den Unterbäumen besucht, die Unterbäume werden von links nach rechts abgearbeitet • Breitendurchlauf – Mit einem Knoten werden seine Nachbarn von links nach rechts besucht 12 Durchlaufstrategie: Preorder 16 10 24 9 14 13 18 15 13 Durchlaufstrategie: Preorder 16 10 24 9 14 13 18 15 16 14 Durchlaufstrategie: Preorder 16 10 24 9 14 13 18 15 16, 10 15 Durchlaufstrategie: Preorder 16 10 24 9 14 13 18 15 16, 10, 9 16 Durchlaufstrategie: Preorder 16 10 24 9 14 13 18 15 16, 10, 9, 14 17 Durchlaufstrategie: Preorder 16 10 24 9 14 13 18 15 16, 10, 9, 14, 13 18 Durchlaufstrategie: Preorder 16 10 24 9 14 13 18 15 16, 10, 9, 14, 13, 15 19 Durchlaufstrategie: Preorder 16 10 24 9 14 13 18 15 16, 10, 9, 14, 13, 15, 24 20 Durchlaufstrategie: Preorder 16 10 24 9 14 13 18 15 16, 10, 9, 14, 13, 15, 24, 18 21 Durchlaufstrategie: Preorder 16 10 24 9 14 13 18 15 16, 10, 9, 14, 13, 15, 24, 18 22 Durchlaufstrategie: Preorder void PreOrder() { PreOrder(wurzel); } private void PreOrder(Knoten aktuell) { if (aktuell != null) { System.out.println(aktuell.GibWert()); PreOrder(aktuell.GibLinks()); PreOrder(aktuell.GibRechts()); } } 23 Schönen Dank für Ihre Aufmerksamkeit und Auf Wiedersehen