Binärbäume und Suchbäume Bäume (trees) können als eine Verallgemeinerung von Listen angesehen werden • Bei einer Liste hat jeder Knoten einen Nachfolger • Bei einem Baum hat jeder Knoten potentiell mehrere „Nachfolger“, Kindknoten (child, children) genannt. • Vorgänger eines Kindknotens wird Elternknoten (parent) genannt. • Ein Knoten ohne Elternknoten wird Wurzel (root) genannt. • Knoten ohne Kindknoten heißen Blätter (leaf, leaves). • Knoten mit Kindknoten heißen auch innere Knoten (inner nodes). • Jedem Knoten ist eine Ebene im Baum zugeordnet. Die Wurzel hat die Ebene 0. Die Ebene eines Knotens ist die Länge des Pfades von diesem Knoten bis zur Wurzel. • Die Höhe eines Baums ist die maximale Ebene, auf der sich Knoten befinden. • Der Verzweigungsgrad eines Knotens ist die Anzahl seiner Kinder. Ein Blatt hat den Verzweigungsgrad 0. • In der Informatik zeichnet man Bäume üblicherweise von der Wurzel abwärts. Beispiel: Bei dem rechts dargestellten Baum ist der Knoten 3 ein Elternknoten der Knoten 5 und 6. Die Knoten 2, 3 und 4 sind Kinder von 1. Bei diesem Baum liegt der Knoten mit der 1 (Wurzel) auf Ebene 0, die Knoten 2, 3 und 4 auf Ebene 1 und die Knoten 5 und 6 auf Ebene 2. Die Höhe des Baumes ist 2 Binärbäume Definition (rekursiv): Ein Binärbaum ist entweder - der leere Baum oder - ein Paar (w, (l, r)), bestehend aus dem Knoten w, der Wurzel des Baumes und einem geordneten Paar von Bäumen. Der erste Baum dieses Paares heißt linker, der zweite rechter Unterbaum des Binärbaumes. Ein Binärbaum hat den Verzweigungsgrad 2. Der Baum des vorigen Beispiels ist kein Binärbaum, da die Wurzel Verzweigungsgrad 3 hat Ein Blatt ist ein Baum, dessen beide Unterbäume leer sind. Ein Binärbaum heißt voll, falls alle inneren Knoten den Verzweigungsgrad 2 haben. Ein voller Binärbaum heißt vollständig, falls alle Blätter die gleiche Höhe haben. Aufgaben: 1. Zeichnen Sie einen vollen und einen vollständigen Baum der Höhe 3. 2. Begründen oder widerlegen Sie die folgenden Aussagen: a. Jeder Knoten eines Binärbaums hat zwei nichtleere Teilbäume. b. Beim Löschen eines Knotens aus einem Binärbaum ändert sich die Höhe dieses Baumes. c. Die Anzahl der Blätter eines vollständigen Binärbaums der Höhe h ist gleich 2h. d. Die Anzahl der Knoten im vollständigen Binärbaum der Höhe h ist gleich 2h+1 -1. 3. Beim Traversieren eines Baumes unterscheidet man drei Reihenfolgen: inorder (lwr), preorder (wlr), postorder (lrw). Geben Sie für den abgebildeten Baum die Preorder-, Inorder- und die Postorder-Traversierung an. Implementieren Sie die folgenden Funktionen in Haskell: 1. Tests, ob der gegebene Baum a. ein leerer Knoten ist, b. ein innerer Knoten ist, c. ein Blattknoten ist. 2. Die Anzahl der a. leeren Knoten, b. inneren Knoten, c. Blattknoten. 3. Die Höhe des Baumes, die Länge des Pfades zum am weitesten linken Abkömmling, den Inhalt dieses Abkömmlings. 4. Die Liste der Knoten in Preorder-, Inorder- und die Postorder-Traversierung. Suchbäume Ein binärer Baum heißt Suchbaum, wenn seine Knotenmenge geordnet ist und keine Duplikate vorkommen. Als Invariante gilt: Alle Elemente im linken Unterbaum sind kleiner als das Element in der Wurzel, alle Elemente im rechten Unterbaum sind größer als die Wurzel. Diese beiden Eigenschaften gelten für alle Unterbäume. Anwendungsbeispiele für Suchbäume sind Schlüsselnummern in Datenbanken, Personalnummern, Kontonummern. Aufgaben: Gegeben ist die Liste =[mo,di,mi,do,fr,sa,so], wobei gilt mo<di<mi<…<so 1. Ordnen Sie diese Elemente in dieser Reihenfolge in einen binären Suchbaum ein. 2. Ordnen sie die Elemente der Liste alphabetisch in einen binären Suchbaum ein. 3. Nun sei die Liste ungeordnet in der Reihenfolge [do, di, sa, mi, mo, fr, so], die Ordnung wie unter 1. Wie sieht der Suchbaum jetzt aus?