Kapitel 8: Elementare Datenstrukturen Inhalt Wintersemester 2007/08 ● Definition Einführung in die Informatik für ● ADT Keller Naturwissenschaftler und Ingenieure ● ADT Schlange (alias Einführung in die Programmierung) ● ADT Liste (Vorlesung) ● ADT Binärbaum - Exkurs: Einfache Dateibehandlung Prof. Dr. Günter Rudolph … endlich! ☺ - Exkurs: Strings (C++) Fakultät für Informatik Lehrstuhl für Algorithm Engineering Rudolph: EINI (WS 2007/08) ● Kap. 8: Elementare Datenstrukturen Kapitel 8: Elementare Datenstrukturen 2 Kapitel 8: Elementare Datenstrukturen ADT Binäre Bäume ADT Binäre Bäume: Terminologie Beispiel: kleiner : nach links Zahlenfolge 17, 4, 36, 2, 8, 19, 40, 6, 7, 37 größer : nach rechts keine Wurzel und kein Blatt ⇒ innerer Knoten Wurzel 17 4 36 2 8 19 6 40 L R linker Unterbaum rechter Unterbaum 37 z.B. „Suche, ob 42 enthalten“ 7 benötigt nur 3 Vergleiche bis zur Entscheidung false Rudolph: EINI (WS 2007/08) ● Kap. 8: Elementare Datenstrukturen 3 Rudolph: EINI (WS 2007/08) ● Kap. 8: Elementare Datenstrukturen Blätter 4 1 Kapitel 8: Elementare Datenstrukturen Kapitel 8: Elementare Datenstrukturen ADT Binäre Bäume: Datenstruktur struct BinTree { T data; BinTree *lTree, *rTree; }; ADT Binäre Bäume: Einfügen BinTree *Insert(int key, BinTree *tree) { if (tree == 0) { BinTree *b = new BinTree; b->data = key; b->lTree = b->rTree = 0; return b; } else { if (tree->data < key) tree->rTree = Insert(key, tree->rTree); else if (tree->data > key) tree->lTree = Insert(key, tree->lTree); return tree; } } // Nutzdaten // linker und rechter Unterbaum Falls ein Unterbaum nicht existiert, dann zeigt der Zeiger auf 0. bool IsElement(int key, BinTree *tree) { if (tree == 0) return false; if (tree->data == key) return true; if (tree->data < key) return IsElement(key, tree->rTree); return IsElement(key, tree->lTree); } Rudolph: EINI (WS 2007/08) ● Kap. 8: Elementare Datenstrukturen 5 Kapitel 8: Elementare Datenstrukturen ADT Binäre Bäume void Clear(BinTree *tree) { if (tree == 0) return; // Clear(tree->lTree); // Clear(tree->rTree); // delete tree; // } 1 3 6 4 Rekursionsabbruch linken Unterbaum löschen rechten Unterbaum löschen aktuellen Knoten löschen 20 u.s.w. 19 2 7 17 8 Höhe := Länge des längsten Pfades von der Wurzel zu einem Blatt. 16 9 Höhe(leerer Baum) = 0 10 5 15 12 11 6 Kapitel 8: Elementare Datenstrukturen ADT Binäre Bäume: Aufräumen 18 Rudolph: EINI (WS 2007/08) ● Kap. 8: Elementare Datenstrukturen Höhe(nicht leerer Baum) = 1 + max { Höhe(linker U-Baum), Höhe(rechter U-Baum) } 13 14 Rudolph: EINI (WS 2007/08) ● Kap. 8: Elementare Datenstrukturen Anmerkung: rekursive Definition! 7 Rudolph: EINI (WS 2007/08) ● Kap. 8: Elementare Datenstrukturen (U-Baum = Unterbaum) 8 2 Kapitel 8: Elementare Datenstrukturen ADT Binäre Bäume Kapitel 8: Elementare Datenstrukturen ADT Binäre Bäume 1 1 2 2 3 3 4 4 ● Ein vollständiger Baum der Höhe h besitzt 2h – 1 Knoten. Auf Ebene k können jeweils zwischen 1 und 2k-1 Elemente gespeichert werden. Man braucht maximal h Vergleiche, um Element (ggf. nicht) zu finden. Bei n = 2h – 1 Elementen braucht man log2(n) < h Vergleiche! ⇒ In einem Baum der Höhe h können also zwischen h und ● Ein degenerierter Baum der Höhe h besitzt h Knoten (= lineare Liste). Elemente gespeichert werden! Man braucht maximal h Vergleiche, um Element (ggf. nicht) zu finden. Bei n = h braucht man also n Vergleiche! Rudolph: EINI (WS 2007/08) ● Kap. 8: Elementare Datenstrukturen 9 Rudolph: EINI (WS 2007/08) ● Kap. 8: Elementare Datenstrukturen 10 3