Algorithmen und Datenstrukturen SS09



Ähnliche Dokumente
4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes.

Lernziele: Ausgleichstechniken für binäre Bäume verstehen und einsetzen können.

Binäre Bäume Darstellung und Traversierung

368 4 Algorithmen und Datenstrukturen

13. Binäre Suchbäume

Idee: Wenn wir beim Kopfknoten zwei Referenzen verfolgen können, sind die Teillisten kürzer. kopf Eine Datenstruktur mit Schlüsselwerten 1 bis 10

Datenstrukturen & Algorithmen

WS 2009/10. Diskrete Strukturen

Kapiteltests zum Leitprogramm Binäre Suchbäume

Datenstrukturen und Algorithmen

Algorithmen und Datenstrukturen

15 Optimales Kodieren

Folge 19 - Bäume Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12

Kap. 4.2: Binäre Suchbäume

Algorithmen und Datenstrukturen Suchbaum

t r Lineare Codierung von Binärbbäumen (Wörter über dem Alphabet {, }) Beispiel code( ) = code(, t l, t r ) = code(t l ) code(t r )

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Informatik II Bäume. Beispiele. G. Zachmann Clausthal University, Germany Stammbaum. Stammbaum. Stammbaum

KONSTRUKTION VON ROT-SCHWARZ-BÄUMEN

3.2 Binäre Suche. Usr/local/www/ifi/fk/menschen/schmid/folien/infovk.ppt 1

1 topologisches Sortieren

Programmiersprachen und Übersetzer

Tutorium Algorithmen & Datenstrukturen

Datenstruktur, die viele Operationen dynamischer Mengen unterstützt

Algorithmik II. a) Fügen Sie in einen anfangs leeren binären Baum die Schlüsselfolge 20, 28, 35, 31, 9, 4, 13, 17, 37, 25 ein.

Eine Baumstruktur sei folgendermaßen definiert. Eine Baumstruktur mit Grundtyp Element ist entweder

Kapitel 4: Dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2012/13. Prof. Dr. Sándor Fekete

Programmierkurs Java

Primzahlen und RSA-Verschlüsselung

AVL-Bäume Analyse. Theorem Ein AVL-Baum der Höhe h besitzt zwischen F h und 2 h 1 viele Knoten. Definition Wir definieren die nte Fibonaccizahl:

Anmerkungen zur Übergangsprüfung

Kurs 1613 Einführung in die imperative Programmierung

Theoretische Grundlagen der Informatik WS 09/10

Erwin Grüner

Wiederholung ADT Menge Ziel: Verwaltung (Finden, Einfügen, Entfernen) einer Menge von Elementen

Theoretische Informatik SS 04 Übung 1

Grundlagen der Programmierung 2. Bäume

Summenbildung in Bauteiltabellen mit If Then Abfrage

Algorithmen und Datenstrukturen Balancierte Suchbäume

DATENSTRUKTUREN UND ZAHLENSYSTEME

3.1 Konstruktion von minimalen Spannbäumen Es gibt zwei Prinzipien für die Konstruktion von minimalen Spannbäumen (Tarjan): blaue Regel rote Regel

Organisation. Was kommt zum Test? Buch Informatik Grundlagen bis inkl. Kapitel 7.4 Wissensfragen und Rechenbeispiele

Basis und Dimension. Als nächstes wollen wir die wichtigen Begriffe Erzeugendensystem und Basis eines Vektorraums definieren.

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Grundlagen der Theoretischen Informatik, SoSe 2008

Professionelle Seminare im Bereich MS-Office

Vorlesung Diskrete Strukturen Graphen: Wieviele Bäume?

4. AUSSAGENLOGIK: SYNTAX. Der Unterschied zwischen Objektsprache und Metasprache lässt sich folgendermaßen charakterisieren:

Grundlagen der Informatik I Informationsdarstellung

Codierungstheorie Rudolf Scharlau, SoSe

Kurzanweisung für Google Analytics

Informatik 11 Kapitel 2 - Rekursive Datenstrukturen

Algorithmen und Datenstrukturen 2

Vorkurs Informatik WiSe 15/16

50. Mathematik-Olympiade 2. Stufe (Regionalrunde) Klasse Lösung 10 Punkte

1. Man schreibe die folgenden Aussagen jeweils in einen normalen Satz um. Zum Beispiel kann man die Aussage:

Zeichen bei Zahlen entschlüsseln

Serienbrieferstellung in Word mit Kunden-Datenimport aus Excel

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Einrichten einer Festplatte mit FDISK unter Windows 95/98/98SE/Me

Hilfe zur Urlaubsplanung und Zeiterfassung

Verkehrsteilnehmer. Beispiel: Wir betrachten die Modellierung von Handlungskomponenten wie Verkehrsteilnehmern und Straßen.

1. Woche Einführung in die Codierungstheorie, Definition Codes, Präfixcode, kompakte Codes

Grammatiken. Einführung

Abschnitt: Algorithmendesign und Laufzeitanalyse

1. Adressen für den Serienversand (Briefe Katalogdruck Werbung/Anfrage ) auswählen. Die Auswahl kann gespeichert werden.

Anleitung für Kunden zum Umgang mit verschlüsselten s von der LASA Brandenburg GmbH

Whitebox-Tests: Allgemeines

5.2 Neue Projekte erstellen

my.ohm Content Services Autorenansicht Rechte

Programmiertechnik II

Software-Engineering SS03. Zustandsautomat

Java: Vererbung. Teil 3: super()

Kommunikations-Management

Informationsblatt Induktionsbeweis

Was bisher geschah Wissensrepräsentation und -verarbeitung in Zustandsübergangssystemen Constraint-Systemen Logiken Repräsentation von Mengen

Zur drittletzten Zeile scrollen

4. Lernen von Entscheidungsbäumen. Klassifikation mit Entscheidungsbäumen. Entscheidungsbaum

Übungen Programmieren 1 Felix Rohrer. Übungen

Anleitung zum erfassen von Last Minute Angeboten und Stellenangebote

1. Formale Sprachen 1.2 Grammatiken formaler Sprachen

4 Aufzählungen und Listen erstellen

Das Briefträgerproblem

Programmteil Zeiterfassung für Projekt und Mitarbeiter

Praktische Mathematik: Lineare und Netzwerk-Optimierung (SS 2015) Praktikumsaufgaben

Stapelverarbeitung Teil 1

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten

Algorithmen und Datenstrukturen. Bäume. M. Herpers, Y. Jung, P. Klingebiel

Fachbericht zum Thema: Anforderungen an ein Datenbanksystem

Anzeige von eingescannten Rechnungen

ARCO Software - Anleitung zur Umstellung der MWSt

Bauteilattribute als Sachdaten anzeigen

Freischaltung eines neuen VR-NetKeys mit SecureGo

1 Mathematische Grundlagen

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

METTLER TOLEDO USB-Option Installation der Treiber unter Windows XP

Anleitung zur Erstellung von Serienbriefen (Word 2003) unter Berücksichtigung von Titeln (wie Dr., Dr. med. usw.)

Anwendungsbeispiele. Neuerungen in den s. Webling ist ein Produkt der Firma:

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken.

Transkript:

Foliensatz 8 Michael Brinkmeier Technische Universität Ilmenau Institut für Theoretische Informatik Sommersemester 29 TU Ilmenau Seite / 54 Binärbäume TU Ilmenau Seite 2 / 54

Binäre Bäume Bäume und speziell Binärbäume sind ein sehr wichtiges und grundlegendes Konzept in der Informatik. Sie treten in vielen Anwendungen und Zusammenhängen auf: Binäre Suchbäume Repräsentation von arithmetischen und logischen Ausdrücken (allgemeine Bäume) Entscheidungsbäume Codierungs-/Decodierungsbaum... TU Ilmenau Seite 3 / 54 Anwendungen von Binärbäumen Beispiel (Arithmetischer Ausdruck mit zweistelligen Operatoren) ((((x 2 x 4 ) + ((x 3 x 7 ) (x 6 /x ))) + (x 5 (x 9 x 3 )))/((x 5 x 6 ) x )). / + + x x 5 x 5 x 6 x 2 x 4 / x 9 x 3 x 3 x 7 x 6 x TU Ilmenau Seite 4 / 54

Anwendungen von Binärbäumen Beispiel (Arithmetischer Ausdruck mit zweistelligen Operatoren) Auswertung geschieht bottom-up, d.h. beginnend in den Blättern. x = 5, x 2 = 3, x 3 = 2, x 4 = 7, x 5 = 7, x 6 =, x 7 = 5, x 9 = 5. / + + x x 5 x 5 x 6 x 2 x 4 / x 9 x 3 x 3 x 7 x 6 x / -5 + 4-8 TU Ilmenau Seite 5 / 54 + -3 7 Anwendungen von Binärbäumen -3 5 Beispiel (Codierungs-Decodierungsbaum) Die Zeichen aus einem Alphabet Σ erhalten binäre Codes (unter Umständen verschiedener Länge). A B C D E F G H I K Um eine Zeichenreihe zu codieren, benutzt man die Tabelle: F E I G E hat die Codierung Besonders wichtig sind präfixfreie Codes, bei denen kein Codewort Anfangsstück (Präfix) eines anderen Codewortes ist. Solche Codes erlauben eine eindeutige Decodierung ohne die Verwendung von Leerzeichen. TU Ilmenau Seite 6 / 54

Anwendungen von Binärbäumen Beispiel (Codierungs-Decodierungsbaum) A B C D E F G H I K Der Code legt den Weg im Baum zum Buchstaben fest: links, rechts. E C G D H F B I A K TU Ilmenau Seite 7 / 54 Anwendungen von Binärbäumen Beispiel (Codierungs-Decodierungsbaum) Decodierung folgt einfach dem durch die Bitfolge vorgegebenen Weg bis zum Blatt. E C G D H F B I A K FEIGE TU Ilmenau Seite 8 / 54

Die Terminologie von Binärbäumen v Wurzel Kante v 2 v 4 Vorgänger von v 5 linker Nachfolger von v 2 v 3 v 5 v 6 rechter Nachfolger von v 4 Blatt TU Ilmenau Seite 9 / 54 Eine Definition von Binärbäumen Definition (Binärbaum) Ein Binärbaum T besteht aus einer endlichen Menge V von inneren Knoten einer endlichen Menge L von äußeren Knoten (oder Blättern) sowie zwei Funktionen leftchild : V V L und rightchild : V V L. Dabei gelten die folgenden Bedingungen: In V L gibt es genau einen Knoten r, der nicht als Wert von leftchild und rightchild vorkommt. Dieser Knoten heisst Wurzel. 2 Für jeden Knoten w (V L) \ {r} gibt es genau einen Knoten u V so dass entweder w = leftchild(u) oder w = rightchild(u). Dieser Knoten wird mit p(w) bezeichnet und Vorgänger oder Vater von w genannt. TU Ilmenau Seite / 54

Eine Definition von Binärbäumen Definition (Binärbaum Fortsetzung) 4 Für jedes w V L gilt: Die Folge v = w, v = p(w), v 2 = p(v ), v 3 = p(v 2 ),... bricht nach endlich vielen Schritten mit einem v d = r ab. Diese Eigenschaft heisst Kreisfreiheit. Beachte: Jeder innere Knoten hat genau zwei Nachfolger. In vielen Fällen existieren zwei Mengen D und Z, so dass jedem inneren Knoten v V ein Wert data V (v) D und jedem äußeren Knoren l L ein Wert data L (l) Z zugewiesen wird. D.h. man hat zusätzlich zwei Abbildungen data V : V D und data L : L Z. In einem solchen Fall sprechen wir von (D, Z)-Binärbäumen. TU Ilmenau Seite / 54 Terminologie Binärbaum, engl: binary tree (innerer) Knoten v, engl: node Knoteneintrag: x = data(v) = data(t ) (v Wurzel von T ) x v TU Ilmenau Seite 2 / 54

Terminologie T v : Unterbaum mit Wurzel v x v T v TU Ilmenau Seite 3 / 54 Terminologie (äußerer) Knoten Blatt l, engl: leaf, Pl. leaves Blatteintrag: z = data(l) Wurzel, engl: root z l TU Ilmenau Seite 4 / 54

Terminologie Vater (unmittelbarer) Vorgänger, engl: parent, von v: p(v) linkes Kind (unmittelbarer) Nachfolger, Sohn, engl: left child, von v: leftchild(v) rechtes Kind (unmittelbarer) Nachfolger, Sohn, engl: right child, von v: rightchild(v) TU Ilmenau Seite 5 / 54 Terminologie Weg in T: Knotenfolge oder Kantenfolge, die von v zu einem Nachfahren u führt Länge eines Wegs (v, v,..., v s ): Anzahl s der Kanten auf dem Weg v Weg der Länge 3 von v nach u u TU Ilmenau Seite 6 / 54

Terminologie Vorfahr (Vater von Vater von Vater... von v), engl: ancestor (Im Bild: v ist Vorfahr von u.) Nachfahr (Kind von Kind von...von v), engl: descendant (Im Bild: u ist Nachfahr von v.) Achtung: Oft gilt v als (uneigentlicher) Vorfahr/Nachfahr von v. v u TU Ilmenau Seite 7 / 54 Ein häufiger Spezialfall Die externen Knoten haben keinen Eintrag. (Bzw. jeder hat denselben nichtssagenden Eintrag, z.b..) "Blätter" Ein solcher externer Knoten wird auch als leerer Baum bezeichnet. Oft bezeichnet man dann die inneren Knoten, die keinen inneren Knoten als Nachfolger haben, als Blätter. TU Ilmenau Seite 8 / 54

Ein häufiger Spezialfall Beobachtung Durch die Verwendung leerer externer Knoten ist es möglich jeden gerichteten Baum, in dem jeder Knoten keinen, einen oder zwei Nachfolger hat, als Binärbaum aufzufassen. Man fügt einfach zu jedem Knoten mit keinem oder einem Nachfolger leere Blätter hinzu. TU Ilmenau Seite 9 / 54 Die Signatur von Binärbäumen mit leeren externen Knoten Die Signatur BinaryTree Sorten: Operationen: Elements BinaryTree Boolean empty: BinaryTree compose: Elements BinaryTree BinaryTree BinaryTree leftsubtree: BinaryTree BinaryTree rightsubtree: BinaryTree BinaryTree data: BinaryTree Elements isempty: BinaryTree Boolean TU Ilmenau Seite 2 / 54

Implementierung von Binärbäumen Die Implementierung von Binärbäumen kann über verzeigerte Strukturen erfolgen (siehe AuP-Vorlesung). T : A B C D E F G H TU Ilmenau Seite 2 / 54 Implementierung von BinaryTree Jeder (innere) Knoten ist eine Struktur mit drei Einträgen. Externe Knoten werden nicht repräsentiert (NULL-Zeiger) data leftchild rightchild Speichebedarf für n Knoten: n Dateneinträge und 2n Zeiger, davon n + NULL-Zeiger Zur besseren Navigation bietet sich häufig das Hinzufügen eines Zeigers zum Vater an. data parent leftchild rightchild Details zur Implementierung: AuP TU Ilmenau Seite 22 / 54

Die rekursive Auffassung von Binärbäumen Definition (Induktive Definition von Binärbäumen) D sei eine Menge von Knotenmarkierungen und Z eine Menge von Blattmarkierungen. Für jedes z Z ist (z) ein (D, Z)-Binärbaum. (z) ˆ= z 2 Wenn T und T 2 (D, Z)-Binärbäume sind und x D, dann ist auch (T, x, T 2 ) ein (D, Z)-Binärbaum. x (T, x, T 2 ) ˆ= 3 Nichts sonst ist ein (D, Z)-Binärbaum. T T 2 TU Ilmenau Seite 23 / 54 Die rekursive Auffassung von Binärbäumen Die rekursive Definition erlaubt zwei Interpretationen von Binärbäumen: als geschachtelte Tripel als Zeichenkette Vorteil der rekursiven Definition: Übersichtlichere Programme und Korrektheitsüberlegungen Vorteil der flachen Definition: Eventuell effizientere Ausführung (Iteration statt Rekursion) TU Ilmenau Seite 24 / 54

Die rekursive Auffassung von Binärbäumen T : A B C D 7 E F 37 G 29 H 3 3 7 3 23 ((37, D, (7, G, 3)), B, 7), A, ((29, E, (, H, 23)), C, (3, F, 3)) TU Ilmenau Seite 25 / 54 Die rekursive Auffassung von Binärbäumen Beispiel (Arithmetische Ausdrücke) D = {+,,, /} und Z = {x, x 2, x 3,... }. / + + x x 5 x 5 x 6 x 2 x 4 / x 9 x 3 x 3 x 7 x 6 x Der Arithmetische Ausdruck entspricht der rekursiven Darstellung ohne Kommas. ((((x 2 x 4 ) + ((x 3 x 7 ) (x 6 /x ))) + (x 5 (x 9 x 3 )))/((x 5 x 6 ) x )) TU Ilmenau Seite 26 / 54

Umbau von rekursiver zu flacher Struktur Ist T = (z), so besteht die flache Version von T aus einem externen Knoten mit Inschrift Z. Dieser Knoten ist gleichzeitig die Wurzel. (z) ˆ= z Ist T = (T, x, T 2 ), dann wird rekursiv eine flache Version der beiden Unterbäume T und T 2 konstruiert. r und r 2 seien deren Wurzeln. Anschließend wird ein neuer innerer Knoten r mit Inschrift x erzeut und leftchild(r) = r und rightchild(r) = r 2 gesetzt. (T, x, T 2 ) ˆ= r x r r 2 T T 2 TU Ilmenau Seite 27 / 54 Die Modellalgebra von Binärbäumen Die Modellalgebra für BinaryTree Elements ˆ= BinaryTree ˆ= nichtleere MengeD {T T ist (D, {})-Binärbaum} empty() := compose(x, T, T 2 ) := (T, x, T 2 ) { T falls T = (T, x, T 2 ) leftsubtree(t) := falls T = { T 2 falls T = (T, x, T 2 ) rightsubtree(t) := falls T =... TU Ilmenau Seite 28 / 54

Die Modellalgebra von Binärbäumen Die Modellalgebra für BinaryTree (Fortsetzung) data(t) := isempty(t) := { x falls T = (T, x, T 2 ) falls T = { false falls T = (T, x, T 2 ) true falls T = TU Ilmenau Seite 29 / 54 Terminologie: Tiefe/Level eines Knotens Die Länge des Wegs ω = (v, v,...,v d ) von der Wurzel r = v zum Knoten v = v d heißt Tiefe oder Level von v und wird mit d(v) bezeichnet. 2 3 4 TU Ilmenau Seite 3 / 54

Terminologie: Tiefe/Höhe eines Binärbaumes mit leeren Blättern Definition Die Tiefe d(t) bzw. Höhe h(t) eines Binärbaumes T mit leeren externen Knoten ist wie folgt definiert: d(t) := für T =. d(t) := max {d(v) v ist innerer Koten von T } für T Es gilt d( ) := d((t, x, T 2 )) := + max {d(t ), d(t 2 )}. TU Ilmenau Seite 3 / 54 Terminologie: Tiefe/Höhe eines Binärbaumes mit leeren Blättern Beispiel Höhe - Höhe 3 x 5 Höhe x 2 x 6 x x 4 x 7 x 3 TU Ilmenau Seite 32 / 54

Terminologie: Tiefe/Höhe eines Binärbaumes mit nichtleeren Blättern Definition Die Tiefe d(t) bzw. Höhe h(t) eines Binärbaumes T mit nichtleeren externen Knoten ist wie folgt definiert: d(t) := max {d(v) v ist äußerer Knoten von T }. Damit entspricht die Höhe eines Binärbaumes der maximalen Länge eines Weges von der Wurzel zu einem Blatt. TU Ilmenau Seite 33 / 54 Terminologie: Tiefe/Höhe eines Binärbaumes mit nichtleeren Blättern Beispiel Der folgende Baum hat Tiefe 4. E C G D H F B I A K TU Ilmenau Seite 34 / 54

Terminologie: Die Höhe eines Knotens Definition Die Höhe h(v) eines Knotens v von T ist definiert als die Tiefe d(t v ) des Teilbaums mit Wurzel v. Beispiel Höhe 4 Höhe 3 E Höhe 2 C G D Höhe H F B I A K TU Ilmenau Seite 35 / 54 Was Sie schon immer über Binärbäume wissen wollten... Binärbaumfakten T sei ein Binärbaum mit n inneren Knoten und leeren äußeren Knoten. Dann gilt T hat 2n Kanten/Zeiger 2 T hat n + äußere Knoten 3 Auf Level l liegen höchstens 2 l Knoten, l =,, 2,... 4 Auf Level bis l liegen zusammen höchstens l i= 2i = 2 l+ Knoten. Damit gilt stets log(n + ) d(t) + 5 n d(t) log(n + ) d.h. die Tiefe eines Binärbaumsmit mit n inneren Knoten ist mindestens log n. TU Ilmenau Seite 36 / 54

Was Sie schon immer über Binärbäume wissen wollten... Binärbaumfakten 2 T sei ein Binärbaum mit N nichtleeren äußeren Knoten. Dann gilt T hat n = N innere Knoten 2 T hat 2N 2 Kanten/Zeiger 3 Auf Level bis l liegen zusammen höchstens 2 l Blätter, l =,, 2,... 4 N 2 d(t) 5 N d(t) log N d.h. die Tiefe eines Binärbaumes mit N nichtleeren äußeren Knoten ist mindestens log N. TU Ilmenau Seite 37 / 54 Durchläufe von Binärbäumen TU Ilmenau Seite 38 / 54

Durchläufe von Binärbäumen In vielen Anwendungen muss man (D, Z)-Binärbäume systematisch durchlaufen. Dabei werden nacheinander die Knoten besucht und anwendungsabhängige Aktionen an ihnen durchgeführt. Im Allgemeinen kann man davon ausgehen, dass dazu zwei visit-operationen zur Verfügung stehen: i visit für innere Knoten e visit für äußere Knoten Bei Aufruf auf einem Binärbaum T führen sie die Operation für die Wurzel des Baumes T aus. Beispielaktionen: Die Daten data(t) ausgeben; eine laufende Nummer an die Wurzel v von T vergeben; Zeiger auf T an eine Liste anhängen; zur Wurzel v gehörende Aktion ausführen. TU Ilmenau Seite 39 / 54 Inorder-Durchlauf Inorder-Durchlauf if T = (z) then e visit(z); if T = (T, z, T 2 ) then Inorder-Durchlauf von T ; i visit(z); Inorder-Durchlauf von T 2 ; end TU Ilmenau Seite 4 / 54

Inorder-Durchlauf T : F A O H v S O d T d I t d a r e r dhatravfdseirotod TU Ilmenau Seite 4 / 54 Präorder-Durchlauf Präorder-Durchlauf if T = (z) then e visit(z); if T = (T, z, T 2 ) then i visit(z); Präorder-Durchlauf von T ; Präorder-Durchlauf von T 2 ; end TU Ilmenau Seite 42 / 54

Präorder-Durchlauf T : F A O H v S O d T d I t d a r e r FAHdTarvOSdIerOtd TU Ilmenau Seite 43 / 54 Postorder-Durchlauf Postorder-Durchlauf if T = (z) then e visit(z); if T = (T, z, T 2 ) then Postorder-Durchlauf von T ; Postorder-Durchlauf von T 2 ; i visit(z); end TU Ilmenau Seite 44 / 54

Postorder-Durchlauf T : F A O H v S O d T d I t d a r e r darthvaderistdoof TU Ilmenau Seite 45 / 54 Arithmetische Ausdrücke als Baum Beispiel Die Auswertung eines als Baum vorliegenden arithmetischen Ausdrucks kann in Postorder-Reihenfolge geschehen. Diese Reihenfolge garantiert, dass die Kinder ausgewertet sind, bevor ein Knoten bearbeitet wird. / + + x x 5 x 5 x 6 x 2 x 4 / x 9 x 3 x 3 x 7 x 6 x / -5 TU Ilmenau Seite 46 / 54 + 4-8

Der Kombi-Durchlauf Kombinierter Durchlauf if T = (z) then e visit(z); if T = (T, z, T 2 ) then preorder ivisit(z); Kombi-Durchlauf von T ; inorder ivisit(z); Kombi-Durchlauf von T 2 ; postorder ivisit(z); end Diese Form des Durchlaufs ermöglicht den Datentransport von der Wurzel nach unten und wieder zurück. TU Ilmenau Seite 47 / 54 Zeitanalyse Die Baumdurchläufe wurden mittels rekursiver Prozeduren beschrieben. Jede dieser Prozeduren benötigt abgesehen von den rekursiven Aufrufen genau die Zeit, die i visit bzw. e visit benötigen. Für jeden inneren und äußeren Knoten wird die Prozedur genau einmal aufgerufen. Gesamtzeit auf einem Binärbaum mit n inneren Knoten: O(n T ivisit + (n + ) T evisit ) wobei T ivisit und T evisit die von den beiden visit-operationen benötigte Zeit ist. Fazit Die In-, Prä- und Postorder-Durchläufe eines Binärbaumes mit n inneren Knoten benötigen abgesehen von den Aufrufen für die visit-operationen lineare Zeit. TU Ilmenau Seite 48 / 54

Levelorder-Durchläufe a c d a c c 2 e d b d f 3 Wir möchten die Knoten levelweise von links nach rechts ablaufen. Resultierende Ausgabe: a, c, d, a, c, c, e, d, b, d, f TU Ilmenau Seite 49 / 54 Levelorder-Durchläufe a c d a c c 2 e d b d f 3 Beobachtung Sei v, v 2,..., v k die korrekte Reihenfolge der Knoten im Level l. Dann ist die korrekte Reihenfolge der Knoten im Level l + : leftchild(v ), rightchild(v ), leftchild(v 2 ), rightchild(v 2 ),... wobei fehlende Kinder einfach weggelassen werden. TU Ilmenau Seite 5 / 54

Levelorder-Durchläufe a c d a c c 2 e d b d f 3 Dies führt zu der Idee, eine Queue zu benutzen, in die wir zuerst die Knoten des Levels d.h. die Wurzel einfügen. Anschließend wird der erste Knoten entfernt und dessen Kinder hinten an die Queue angehängt. Dieses wird wiederholt, bis die Queue leer ist. TU Ilmenau Seite 5 / 54 Levelorder-Durchläufe Eingabe: Ein Binärbaum v (repräsentiert durch seine Wurzel) Daten: Eine Queue Q von Binärbäumen count = ; if v NULL then count + +; v.order = count; // Entdecke die Wurzel v.level = ; enqueue(q, v); end while not isempty(q) do w = first(q); dequeue(q); visit(w); for p = leftchild(w),rightchild(w) do if p! = NULL then count + +; p.order = count; // Entdecke p p.level = w.level + ; enqueue(q, p) ; end end end TU Ilmenau Seite 52 / 54

Die Korrektheit Satz Der Levelorder-Durchlauf benötigt Zeit O(n T visit + n), wobei T visit die Zeit für visit ist. 2 Der Levelorder-Durchlauf ordnet jedem Knoten v des Binärbaums korrekt seine Tiefe zu (in v.level) Beweisskizze Man beweist die folgende Behauptung per Induktion über das Level von v: Jeder innere Knoten v des Binärbaums wird genau einaml in die Queue eingefügt, genau einmal entnommen und im Rumpf der While-Schleife bearbeitet. Dabei wird die korrekte Levelnummer vergeben. Weil Queue-Operationen Zeit O() benötigen, ist der Zeitbedarf ohne die visit-operationen in O(n). TU Ilmenau Seite 53 / 54