Übung Praktische Informatik 2 SS 2015 Übung 5: Topdown-234-Baum, Rot-Schwarz-Baum Abgabetermin: 21.04.2015 Name: ___________________________________________ Gruppe: Aufgabe ☐ G1 Di 10:15 ☐ G2 Di 11:00 Matrikelnummer: __________________ ☐ G3 Di 12:45 Punkte gelöst abzugeben schriftlich abzugeben elektronisch Korr. Aufgabe 1 6 ☐ Zeichnungen - ☐ Aufgabe 2 6 ☐ Zeichnungen - ☐ Aufgabe 3 12 ☐ Java-Programm, Testfälle und Ergebnisse Java-Programm, Testfälle und Ergebnisse ☐ Punkte Aufgabe 1: Topdown-234-Baum (6 Punkte) Simulieren Sie das Einfügen der Buchstaben C H R O N O L O G I C (in dieser Reihenfolge) in einen Topdown­234­Baum. Zeichnen Sie schrittweise den Baum nach jedem eingefügtem Buchstaben. Wenn Sie beim Einfügen einen Knoten splitten müssen, zeichnen Sie Splitten und Einfügen als zwei getrennte Schritte. Markieren Sie neu eingefügte Schlüssel durch Einrahmen. Hinweis: Sortieren Sie Buchstaben, die kleiner als die Wurzel sind, links ein und sortieren Sie Buchstaben, die größer oder gleich der Wurzel sind, rechts ein. Abzugeben ist: Zeichnungen Aufgabe 2: Rot/Schwarz-Baum (6 Punkte) Simulieren Sie das Einfügen der Buchstaben C H R O N O L O G I C (in dieser Reihenfolge) in einen Rot­Schwarz­Baum. Zeichnen Sie schrittweise den Baum nach jedem eingefügten Buchstaben. Wenn Sie beim Einfügen Knoten splitten oder rotieren müssen, zeichnen Sie jeden Schritt getrennt. Markieren Sie zu rotierende Knoten durch Einrahmen. Hinweis: Sortieren Sie Buchstaben, die kleiner als die Wurzel sind, links ein und sortieren Sie Buchstaben, die größer oder gleich der Wurzel sind, rechts ein. Abzugeben ist: Zeichnungen Übung Praktische Informatik 2 SS 2015 Aufgabe 3: Einfügen in einen Topdown-234-Baum (12 Punkte) Implementieren Sie die Einfügemethode eines Topdown­234­Baums, der Zeichen speichert. Verwenden Sie dazu die vorgegebene Klasse Tree234, welche bereits teilweise implementiert ist. Die Schnittstelle der Klasse Tree234 ist wie folgt: package at.jku.students; public class Tree234 { private TreeNode234 root; public void insert(char c) { /* TODO your implementation */ } private void split(TreeNode234 parent, int successorIndex, TreeNode234 splitNode) { ... } public String makeDot() { return new DotMakerTree234(root).getDot(); } } Benützen Sie die bereits implementierte Methode split. Diese teilt einen Knoten in zwei neue Knoten auf und fügt den mittleren Wert in den Elternknoten ein. Die neuen Knoten werden entsprechend mit dem Elternknoten verlinkt. Wenn noch kein Elternknoten existiert, wird ein neuer erstellt. Verwenden Sie diese Methode um volle Baumknoten während der Suche nach der richtigen Einfügeposition aufzuteilen. Schreiben Sie weiters ein ausführbares Programm und überprüfen Sie Ihre Implementierung mit dem Eingabewort aus Aufgabe 1. Implementierungshinweise: ■ Implementieren Sie die Methode insert rekursiv. ■ Verwenden Sie die Klasse TreeNode234 aus der Vorgabedatei ssw­pi2­ue05.jar für Baumknoten. ■ Verwenden Sie die vorgegebene und teilweise implementierte Klasse Tree234 von der Übungs­Website. ■ Verwenden Sie die Methode Tree234.makeDot(), um den 234­Baum mittels GraphViz zu visualisieren. Abzugeben ist: Java­Code, Testergebnisse (ausgedruckt und elektronisch)