Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

FH-Hof Sortieren mit Binären Bäumen Richard Göbel.

Ähnliche Präsentationen


Präsentation zum Thema: "FH-Hof Sortieren mit Binären Bäumen Richard Göbel."—  Präsentation transkript:

1 FH-Hof Sortieren mit Binären Bäumen Richard Göbel

2 FH-Hof Sortierte Binäre Bäume Jeder Knoten hat höchsten zwei Nachfolger Alle Knoten im linken Teilbaum sind kleiner (oder gleich) als die Wurzel Alle Knoten im rechten Teilbaum sind größer (oder gleich) als die Wurzel

3 FH-Hof Binärer Baum: Definition eines Knotens type Node { private int value; private Node left; private Node right; }

4 FH-Hof Binärer Baum: Ausgabe der Knoten void print(Node n, int depth) { for (int i = 0; i < depth; i++) { print(" "); } if (n == null) { println(" "); } else { println("Value: " + n.value); print(n.left, depth+1); print(n.right, depth+1);} } void print(Node root) { print(root, 0); }

5 FH-Hof Binärer Baum: Suche nach Werten Node search(Node n, int v) { if (v == n.value) return this; if (v < n.value) { if (n.left == null) { return null; } else { return search(n.left,v); } } else { // v > n.value if (n.right == null) { return null; } else { return search(right.n,v);} }}

6 FH-Hof Binärer Baum: Einfügen von Werten void insert(Node n, int v) { if (v == n.value) { // hier neuen Eintrag hinzufuegen } else if (v < n.value) { if (n.left == null) { n.left = new Node(v); } else { insert(n.left, v); }} else { // v > n.value if (n.right == null) { n.right = new Node(newValue); } else { insert(n.right,v);}} }

7 FH-Hof Binärer Baum: Löschen eines Knotens - Fälle Knoten ohne Nachfolger Knoten mit einem Nachfolger Knoten mit zwei Nachfolgern

8 FH-Hof Binärer Baum: Löschen eines Knotens - Code I Node delete(Node n, int v) { if (v == n.value) { if (n.left == null) return right; if (n.right == null) return left; if (n.right.left == null) { n.value = n.right.value; n.right = n.right.right; return n; } else { value = deleteMin(right); return n; }...

9 FH-Hof Binärer Baum: Löschen eines Knotens - Code II... if (v < n.value) { if (n.left != null) { n.left = delete(n.left,v); } return n; } else { // oldValue > value if (n.right != null) { n.right = delete(n.right,v); } return n; }

10 FH-Hof Binärer Baum: Löschen eines Knotens - Code III Node deleteMin(Node n) { // Bitte selbst implementieren! }

11 FH-Hof Binärer Baum – Kapselung Datentyp für den Einstieg type BinTree { Node content = null; int size = 0; } Entsprechende Funktionen definieren Node search(BinTree t, int v) … void insert(BinTree t, int v) … void delete(BinTree t, int v) … print(BinTree t) … Datentyp "Node" ist nur lokal wichtig

12 FH-Hof Binärer Baum - Weitere Dienstleistungen Sortierte Ausgabe aller Einträge Sortierte Ausgabe aller Einträge größer (kleiner) als ein vorgegebener Wert Sortierte Ausgabe aller Einträge zwischen zwei Werten

13 FH-Hof Binärer Baum - Sortierte Ausgabe aller Einträge void printAll(Node root) { if (root.left != null) { printAll(root.left); } println(root.value); if (root.right != null) { printAll(root.right); }

14 FH-Hof Binärer Baum - Einträge größer als ein Wert void printAbove(Node root, int min) { if (root.value < min) { if (root.right != null) { printAbove(root.right, min); } else { if (root.left != null) { printAbove(root.left, min); } println(root.value); if (root.right != null) { printAll(root.right); } }}

15 FH-Hof Binärer Baum - Einträge in einem Bereich I void printBetween(Node root, int min,int max) { if (root.value < min) { if (root.right != null) { printBetween(root.right, min, max); } else if (root.value > max) { if (root.left != null) { printBetween(root.left, min, max); }...

16 FH-Hof Binärer Baum - Einträge in einem Bereich II... else { if (root.left != null) { printAbove(root.left, min); } println(root.value); if (root.right != null) { printBelow(root.right, max); }

17 FH-Hof Problem - Bäume mit langen Ästen

18 FH-Hof Lösung: (fast) balancierte Bäume Höhendifferenz des linken und rechten Teilbaums für jeden Knoten ist maximal k (k in der Regel 1) Beispiele: Rot-Schwarz-Baum AVL-Baum (G. M. Adel'son-Vel'skii und Y. M. Landis) Idee: Lokale Reorganisation des Baumes möglich

19 FH-Hof Lokale Transformation eines binären Baumes X Y A BC X Y AB C

20 FH-Hof Transformationen des AVL-Baumes - Teil1

21 FH-Hof Transformationen des AVL-Baumes - Teil 2


Herunterladen ppt "FH-Hof Sortieren mit Binären Bäumen Richard Göbel."

Ähnliche Präsentationen


Google-Anzeigen