1 / 62

Binärbäume

Binärbäume. Klaus Becker 2003. Datenstrukturierung mit Bäumen. Löwe; 12. Esel; 4. Pfau; 27. Esel; 9. Jaguar; 8. Panther; 4. Wolf; 31. Affe; 24. Giraffe; 6. Kamel; 45. Tiger; 6. Zebra; 10. Gorilla; 23. Teil 1. Termbäume. *. +. –. x. 3. *. 5. 2. x. Termbaum.

heller
Download Presentation

Binärbäume

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Binärbäume Klaus Becker 2003

  2. Datenstrukturierung mit Bäumen Löwe; 12 Esel; 4 Pfau; 27 Esel; 9 Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Gorilla; 23

  3. Teil 1 Termbäume

  4. * + – x 3 * 5 2 x Termbaum Ein Termbaum dient dazu, einen Rechenterm wie z. B. (x+3)*(2x-5) strukturell zu repräsentieren. Ziel: Entwicklung eines Programms zur Verarbeitung von Term(bäum)en.

  5. Binärbaum Wurzel * + – x 3 * 5 linker Teilbaum 2 x rechter Teilbaum Ein Binärbaum ist leer oder besteht aus einer Wurzel und zwei Binärbäumen, dem linken und rechten Teilbaum.

  6. Objektorientierte Modellierung inhalt = * links rechts inhalt = + inhalt = – links rechts links rechts inhalt = x inhalt = 3 inhalt = * inhalt = 5 links rechts links rechts links rechts links rechts inhalt = 2 inhalt = x links rechts links rechts

  7. Objektorientierte Modellierung * + – x 3 * 5

  8. OOA-Modell 0..1 0..2 Baum Knoten wurzel: Knoten inhalt: ... links: Knoten rechts: Knoten kennt kennt ... ...

  9. OOD-Modell 0..2 0..1 Baum Knoten kennt - wurzel: Knoten - inhalt: string - links: Knoten - rechts: Knoten kennt + create(w: Knoten) + getWurzel: Knoten + istLeer: boolean + ausgebenInOrder(k: Knoten): string + ausgebenPreOrder(k: Knoten): string + ausgebenPostOrder(k: Knoten): string + create(i: string; l,r: Knoten) + getInhalt: string + getLinks: Knoten + getRechts: Knoten ist TermBaum + auswerten(k: Knoten; w: integer): integer

  10. Implementierung constructor TKnoten.create(inhalt: string; links, rechts: TKnoten);beginself.inhalt := inhalt; self.links := links; self.rechts := rechtsend; function TKnoten.getInhalt: string;beginresult := inhalt;end; function TKnoten.getLinks: TKnoten;beginresult := links;end; function TKnoten.getRechts: TKnoten;beginresult := rechts;end;

  11. Implementierung constructor TBaum.create(w: TKnoten);beginwurzel := w;end; function TBaum.istLeer: boolean;beginresult := (wurzel = nil);end; function TBaum.getWurzel: TKnoten;beginresult := wurzel;end; procedure TBaum.setWurzel(k: TKnoten);beginwurzel := k;end;

  12. * + – x 3 * 5 2 x Erzeugung des Termbaums Aufgabe: Ein Binärbaum (wie der hier dargestellte) soll mit Hilfe der bisher implementierten Baumoperationen erzeugt werden.

  13. * + – x 3 * 5 2 x Erzeugung des Termbaums – Version 1 k1 := TKnoten.create('2', nil, nil);k2 := TKnoten.create('x', nil, nil);k3 := TKnoten.create('*', k1, k2);k4 := TKnoten.create('5', nil, nil);k5 := TKnoten.create('-', k3, k4);k6 := TKnoten.create('x', nil, nil);k7 := TKnoten.create('3', nil, nil);k8 := TKnoten.create('+', k6, k7);k9 := TKnoten.create('*', k8, k5);baum := TTermBaum.create(k9);

  14. * + – x 3 * 5 2 x Erzeugung des Termbaums – Version 2 baum := TTermBaum.create( TKnoten.create('*', TKnoten.create('+', TKnoten.create('x', nil, nil), TKnoten.create('3', nil, nil)), TKnoten.create('-', TKnoten.create('*', TKnoten.create('2', nil, nil), TKnoten.create('x', nil, nil)), TKnoten.create('5', nil, nil))));

  15. Traversierung eines Binärbaums Aufgabe: Ein Binärbaum (wie der hier dargestellte) soll nach einer vorgegeben Regel durchlaufen und verarbeitet (z. B. ausgegeben) werden. * + – x 3 * 5 2 x

  16. Preorder-Traversierung eines Binärbaums * + – x 3 * 5 2 x Verarbeite die WurzelTraversiere den linken Teilbaum in „Preorder“Traversiere den rechten Teilbaum in „Preorder“ * + x 3 - * 2 x 5

  17. Inorder-Traversierung eines Binärbaums * + – x 3 * 5 2 x Traversiere den linken Teilbaum in „Inorder“Verarbeite die WurzelTraversiere den rechten Teilbaum in „Inorder“ x + 3 * 2 * x - 5

  18. Postorder-Traversierung eines Binärbaums * + – x 3 * 5 2 x Traversiere den linken Teilbaum in „Postorder“Traversiere den rechten Teilbaum in „Postorder“Verarbeite die Wurzel x 3 + 2 x * 5 - *

  19. Preorder-Ausgabe Deklaration: function TBaum.ausgebenPreOrder(k:TKnoten):String; beginif (k = nil) then result := '' else result := k.getInhalt + ausgebenPreOrder(k.getLinks) + ausgebenPreOrder(k.getRechts);end; Aufruf: baum.ausgebenPreOrder(baum.getWurzel)

  20. Aufgabe Im Ordner „Termbaum1“ finden Sie ein vorstrukturiertes Programm zur Erzeugung und Verarbeitung von Binärbäumen / Termbäumen. Ergänzen Sie die fehlenden Teile (Erzeugung eines Binärbaums und Ausgabe in Preorder, Inorder, Postorder). Zur Kontrolle: Termbaum2

  21. * + – x 3 * 5 2 x Auswertung eines Termbaums Aufgabe: Ein Termbaum (wie der hier dargestellte) soll bzgl. eines vorgegeben x-Wertes ausgewertet werden: x-Wert einsetzen und Gesamtwert berechnen x = 3: Auswertung liefert 6

  22. Rekursive Problemreduktion baum.auswerten(k,w) if k.getInhalt = '*' then result := * + – x 3 * 5 2 x baum.auswerten(k.links,w) baum.auswerten(k.rechts,w) *

  23. Rekursionsanfang baum.auswerten(k,w) if ((k.getRechts = nil) and (k.getLinks = nil)) then x 3 else result := StrToInt(k.getInhalt); if k.getInhalt = 'x' then result := w

  24. Aufgabe Implementieren Sie die Operation „auswerten“ und ergänzen Sie das Testprogramm. Zur Kontrolle: Termbaum2

  25. Teil 2 Suchbäume

  26. Textindex Die #Geschichte# des Kölner Zoos#Gründung# des Zoo und die ersten JahreAuf Betreiben von Dr. Caspar #Garthe#, dem ersten Oberlehrer an der Höheren Bürgerschule am Quatermarkt zu Köln, schlossen sich wohlhabende und einflußreiche, zugleich tierliebende und zoobegeisterte Bürger der Stadt zu einer Aktiengesellschaft zusammen, um 1860 in Köln einen #Zoologischen Garten# zu gründen.In kaum einem anderen Zoo läßt sich die #Entwicklung# der Zoologischen Gärten anhand noch erhaltener #Tierhäuser und -anlagen# aus den verschiedenen #Epochen# so gut nachvollziehen wie im Kölner Zoo. Das älteste Monument ist das 1863 unter Leitung von Dr. Heinrich #Bodinus# (1859-1869) erbaute #Elefantenhaus# in #maurischem Stil#. ... Affeninsel; 33 Blockhaus-Stil; 20 Bodinus; 16 Elefantenhaus; 79 Elefantenhaus; 17 Entwicklung; 11 Epochen; 14 Funck; 19 Garthe; 4 Geschichte; 1 Gründung; 2 Hagenbeck; 28... Ziel: Es soll ein Programm entwickelt werden, mit dessen Hilfe ein Textindex erstellt und zum „Nachschlagen“ benutzt werden kann. Im vorliegenden Fall soll der Textindex die Zeilen-nummern der markierten Begriffe enthalten.

  27. Prototyp

  28. Zur Wahl der Datenstruktur Affe; 24 Esel; 9 Esel; 4 Giraffe; 6 Gorilla; 23 Jaguar; 8 Liste  Lineare Suche Löwe; 12 Esel; 4 Pfau; 27 Esel; 9 Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Gorilla; 23 Binärbaum  Binäre Suche

  29. Suchbaum Löwe; 12 Esel; 4 Pfau; 27 Esel; 9 Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Gorilla; 23 alle  Wurzel alle > Wurzel

  30. Suchbaum Löwe; 12 Esel; 4 Pfau; 27 Esel; 9 Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Gorilla; 23 alle  Wurzel alle > Wurzel

  31. Einfügen: Problemspezifikation Ausgangszustand: Fasan; 13 Löwe; 12 Esel; 4 Pfau; 27 Esel; 9 Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Zielzustand: Fasan; 13 Gorilla; 23

  32. Einfügen: Lösungsstrategie Situation: aktueller Wurzelknoten existiertneuer Begriff  aktueller Begrifflinker Teilbaum nicht leer Fasan; 13 neu: Löwe; 12 aktuell: Esel; 4 Pfau; 27 Esel; 9 Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Gorilla; 23

  33. Einfügen: Lösungsstrategie Problemreduktion: Einfügen im linken Teilbaum Fasan; 13 neu: Löwe; 12 aktuell: Esel; 4 Pfau; 27 Esel; 9 Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Gorilla; 23

  34. Einfügen: Lösungsstrategie Situation: aktueller Wurzelknoten existiertneuer Begriff > aktueller Begriffrechter Teilbaum nicht leer Fasan; 13 neu: Löwe; 12 aktuell: Esel; 4 Pfau; 27 Esel; 9 Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Gorilla; 23

  35. Einfügen: Lösungsstrategie Problemreduktion: Einfügen im rechten Teilbaum Fasan; 13 neu: Löwe; 12 aktuell: Esel; 4 Pfau; 27 Esel; 9 Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Gorilla; 23

  36. Einfügen: Lösungsstrategie Situation: aktueller Wurzelknoten existiertneuer Begriff  aktueller Begrifflinker Teilbaum nicht leer Fasan; 13 neu: Löwe; 12 Esel; 4 Pfau; 27 Esel; 9 aktuell: Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Gorilla; 23

  37. Einfügen: Lösungsstrategie Problemreduktion: Einfügen im linken Teilbaum Fasan; 13 neu: Löwe; 12 Esel; 4 Pfau; 27 Esel; 9 aktuell: Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Gorilla; 23

  38. Einfügen: Lösungsstrategie Situation: aktueller Wurzelknoten existiertneuer Begriff  aktueller Begrifflinker Teilbaum ist leer Fasan; 13 neu: Löwe; 12 Esel; 4 Pfau; 27 Esel; 9 Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 aktuell: Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Gorilla; 23

  39. Einfügen: Lösungsstrategie Problemlösung: linker Nachfolger  neuer Knoten mit neuem Begriff Fasan; 13 neu: Löwe; 12 Esel; 4 Pfau; 27 Esel; 9 Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 aktuell: Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Fasan; 13 Gorilla; 23

  40. Einfügen: Lösungsstrategie Sonderfall: aktueller Wurzelknoten existiert nicht Fasan; 13 neu: aktuell: Fasan; 13 neu: Problemlösung: Wurzel  neuer Knoten mit neuem Begriff aktuell: Fasan; 13

  41. Einfügen: Algorithmus

  42. Suchen: Problemspezifikation Ausgangszustand: Esel : Suchbegriff Zielzustand: Suchergebnis: Esel; 4Esel; 9 Löwe; 12 Esel; 4 Pfau; 27 Esel; 9 Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Gorilla; 23

  43. Suchen: Problemspezifikation Ausgangszustand: Esel : Suchbegriff Suchergebnis: Esel; 4Esel; 9 Idee:Preorder-Durchlauf mit Aufsammeln aller Treffer Löwe; 12 Esel; 4 Pfau; 27 Esel; 9 Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Gorilla; 23

  44. Suchen: Lösungsstrategie Situation: aktueller Wurzelknoten existiertSuchbegriff  aktueller Begriff Esel : Suchbegriff Suchergebnis: Löwe; 12 : aktuell Esel; 4 Pfau; 27 Esel; 9 Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Gorilla; 23

  45. Suchen: Lösungsstrategie Problemreduktion: if Suchbegriff = aktueller Begriff then Daten aufnehmenlinken Teilbaum durchsuchen Esel : Suchbegriff Suchergebnis: Löwe; 12 : aktuell Esel; 4 Pfau; 27 Esel; 9 Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Gorilla; 23

  46. Suchen: Lösungsstrategie Situation: aktueller Wurzelknoten existiertSuchbegriff  aktueller Begriff Esel : Suchbegriff Suchergebnis: Löwe; 12 Esel; 4 : aktuell Pfau; 27 Esel; 9 Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Gorilla; 23

  47. Suchen: Lösungsstrategie Problemreduktion: if Suchbegriff = aktueller Begriff then Daten aufnehmenlinken Teilbaum durchsuchen Esel : Suchbegriff Suchergebnis: Esel; 4 Löwe; 12 Esel; 4 Pfau; 27 : aktuell Esel; 9 Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Gorilla; 23

  48. Suchen: Lösungsstrategie Situation: aktueller Wurzelknoten existiertSuchbegriff  aktueller Begriff Esel : Suchbegriff Suchergebnis: Esel; 4 Löwe; 12 Esel; 4 Pfau; 27 Esel; 9 : aktuell Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Gorilla; 23

  49. Suchen: Lösungsstrategie Problemreduktion: if Suchbegriff = aktueller Begriff then Daten aufnehmenlinken Teilbaum durchsuchen Esel : Suchbegriff Suchergebnis: Esel; 4Esel; 9 Löwe; 12 Esel; 4 Pfau; 27 Esel; 9 : aktuell Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Gorilla; 23

  50. Suchen: Lösungsstrategie Situation: aktueller Wurzelknoten existiertSuchbegriff > aktueller Begriff Esel : Suchbegriff Suchergebnis: Esel; 4Esel; 9 Löwe; 12 Esel; 4 Pfau; 27 Esel; 9 Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 : aktuell Gorilla; 23

More Related