Stunde13-ProgStruct.ink Bäume Beispiele > Dateisystem > XML, HTML > Mindmaps > FIFA > ... Vergleich mit Listen > Verallgemeinerung von Listen: Mehrere Nachfolgeelemente Wie bei Listen > nur ein Nachfolgeelement > Keine Zyklen > Eindeutige Wurzel (Element ohne Vorgänger) > Jeder Knoten ist genau durch einen Pfad mit der Wurzel verbunden 1 Stunde13-ProgStruct.ink Definitionen: Niveau 0 Elternelemente: Direkte Vorgänger Kindelemente: Direkte Nachfolger Blätter: Knoten ohne Kindelemente (6, 15, 13, ...) Teilbaum: Beliebiger Knoten und seine direkten und indirekten Nachfolger Grads > eines Knotens: Anzahl der Kindelemente > eines Baums: Maximaler Grad aller Knoten (hier zwei) Niveau 4 Binärbaum: Baum des Grades zwei Vielwegbaum: Baum mit Grad >= zwei Tiefe eines Knotens: Länge des Pfades bis zur Wurzel Beispiele - 16: Tiefe = 3 - Wurzel: Tiefe = 0 2 2 1 Niveau: Alle Knoten mit gleicher Tiefe Höhe: Längster vorkommende Pfad (größtes Niveau) 2 Stunde13-ProgStruct.ink Traversierung - In-Order Knoten beim zweiten Vorbeikommen zählen (Blätter beim ersten) 2-1-8-5-9-3-10-6-7-4 Beispiel: Compiler - Pre-Order Knoten beim 1. Vorbeikommen zählen 1-2-3-5-8-9-6-10-4-7 Beispiel: Kapitel eines Buchs (in grün) - Post-Order Knoten beim letzten Vorbeikommen zählen 2-8-9-5-10-6-3-7-4-1 Beispiel: Traversieren eines Dateisystems, um Größe zu bestimmen 1 2.1 2.1.1 3 2 2.2 2.1.2 3.1 2.2.1 In Grün: Kapitel eines Buchs 3 Stunde13-ProgStruct.ink 4 Stunde13-ProgStruct.ink Binärbäume Node content:Object leftNode:Node rightNode:Node 5 Stunde13-ProgStruct.ink Binäre Suchbäume Definition: Binäre Suchbäume sind binäre Bäume für die gilt: Alle Schlüssel im linken Teilbaum eins Knotens b sind kleiner als b Alle Schlüssel im rechten Teilbaum eins Knotens b sind größer als b 6 Stunde13-ProgStruct.ink Einfügen 10, 5, 14, 7, 18, 12, 6 5, 10, 7, 14, 6, 18, 12 5, 10, 7, 6, 14, 12, 18 5, 6, 7, 10, 12, 14, 18 1. Reihe 3. Reihe 5 10 5 10 14 7 12 7 18 6 5 6 4. Reihe 14 12 18 6 7 entarteter Suchbaum 10 12 14 18 7 Stunde13-ProgStruct.ink Löschen von Elementen in einem binären Suchbaum Löschen 6 Löschen 7 6 5 14 7 10 10 10 5 Löschen 10 12 7 18 6 5 14 12 14 7 18 12 18 6 1. Möglichkeit: Knoten ist ein Blatt (Beispiel 6): Blatt löschen 2. Möglichkeit: Knoten ist kein Blatt (Beispiel 7) und hat ein Kind: Kind verweist auf Elternelement des zu löschenden Elements 3. Möglichkeit: Knoten ist kein Blatt (Beispiel 19) und hat zwei Kunder: a) Kleinstes Elements des rechten Teilbaums ersetzt zu löschenden Knoten b) Größte Elements des linken Teilbaums ersetzt zu löschenden Knoten 8 Stunde13-ProgStruct.ink höhenbilanziert, aber nicht vollstä Weitere Definitionen: Ein vollständiger Binärbaum hat auf jedem Niveau n < Höhe die maximale Knotenzahl Ein voller Binärbaum hat auf jedem Niveau die maximale Knotenzahl Ein Baum ist dann höhenbilanziert, wenn sich für jeden Knoten die Höhe seiner Teilbäume um höchstens +/- 1 unterscheidet. (Höhenbilanzierte Bäume nennt man AVL-Bäume Adelson.Velskii und Landis) 1 1 vollständig ==> höhenbilanziert 9 Stunde13-ProgStruct.ink 10 Stunde13-ProgStruct.ink 11