Title: Bin
1Binärbäume
2Datenstrukturierung mit Bäumen
Löwe 12
Esel 4
Pfau 27
Wolf 31
Jaguar 8
Panther 4
Esel 9
Affe 24
Kamel 45
Giraffe 6
Zebra 10
Tiger 6
Gorilla 23
3Teil 1
Termbäume
4Termbaum
Ein Termbaum dient dazu, einen Rechenterm wie z.
B. (x3)(2x-5) strukturell zu repräsentieren.
Ziel Entwicklung eines Programms zur
Verarbeitung von Term(bäum)en.
5Binä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.
6Objektorientierte Modellierung
inhalt
rechts
links
inhalt
inhalt
rechts
links
rechts
links
inhalt x
inhalt 3
inhalt
inhalt 5
rechts
links
rechts
links
rechts
links
rechts
links
inhalt 2
inhalt x
rechts
links
rechts
links
7Objektorientierte Modellierung
x
3
5
8OOA-Modell
0..1
0..2
Knoten
Baum
inhalt ... links Knoten rechts Knoten
wurzel Knoten
kennt
kennt
...
...
9OOD-Modell
0..2
0..1
Knoten
Baum
kennt
- inhalt string - links Knoten - rechts Knoten
- wurzel 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
10Implementierung
constructor TKnoten.create(inhalt string links,
rechts TKnoten)beginself.inhalt inhalt
self.links links self.rechts
rechtsend function TKnoten.getInhalt
stringbeginresult inhaltend function
TKnoten.getLinks TKnotenbeginresult
linksend function TKnoten.getRechts
TKnotenbeginresult rechtsend
11Implementierung
constructor TBaum.create(w TKnoten)beginwurzel
wend function TBaum.istLeer
booleanbeginresult (wurzel
nil)end function TBaum.getWurzel
TKnotenbeginresult wurzelend procedure
TBaum.setWurzel(k TKnoten)beginwurzel
kend
12Erzeugung des Termbaums
Aufgabe Ein Binärbaum (wie der hier
dargestellte) soll mit Hilfe der bisher
implementierten Baumoperationen erzeugt werden.
13Erzeugung 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)
14Erzeugung 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))))
15Traversierung 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
16Preorder-Traversierung eines Binärbaums
x
3
5
2
x
Verarbeite die WurzelTraversiere den linken
Teilbaum in PreorderTraversiere den rechten
Teilbaum in Preorder
x 3 - 2 x 5
17Inorder-Traversierung eines Binärbaums
x
3
5
2
x
Traversiere den linken Teilbaum in
InorderVerarbeite die WurzelTraversiere den
rechten Teilbaum in Inorder
x 3 2 x - 5
18Postorder-Traversierung eines Binärbaums
x
3
5
2
x
Traversiere den linken Teilbaum in
PostorderTraversiere den rechten Teilbaum in
PostorderVerarbeite die Wurzel
x 3 2 x 5 -
19Preorder-Ausgabe
Deklaration
function TBaum.ausgebenPreOrder(kTKnoten)String
beginif (k nil) then result '' else
result k.getInhalt
ausgebenPreOrder(k.getLinks)
ausgebenPreOrder(k.getRechts)end
Aufruf
baum.ausgebenPreOrder(baum.getWurzel)
20Aufgabe
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
21Auswertung 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
22Rekursive 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)
23Rekursionsanfang
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
24Aufgabe
Implementieren Sie die Operation auswerten und
ergänzen Sie das Testprogramm. Zur Kontrolle
Termbaum2
25Teil 2
Suchbäume
26Textindex
Die Geschichte des Kölner ZoosGrü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.
27Prototyp
28Zur Wahl der Datenstruktur
Esel 9
Affe 24
Giraffe 6
Esel 4
Jaguar 8
Gorilla 23
Liste ? Lineare Suche
Löwe 12
Esel 4
Pfau 27
Wolf 31
Jaguar 8
Panther 4
Esel 9
Affe 24
Kamel 45
Giraffe 6
Zebra 10
Tiger 6
Gorilla 23
Binärbaum ? Binäre Suche
29Suchbaum
Löwe 12
Esel 4
Pfau 27
Wolf 31
Jaguar 8
Panther 4
Esel 9
Affe 24
Kamel 45
Giraffe 6
Zebra 10
Tiger 6
Gorilla 23
alle ? Wurzel
alle gt Wurzel
30Suchbaum
Löwe 12
Esel 4
Pfau 27
Wolf 31
Jaguar 8
Panther 4
Esel 9
Affe 24
Kamel 45
Giraffe 6
Zebra 10
Tiger 6
Gorilla 23
alle ? Wurzel
alle gt Wurzel
31Einfügen Problemspezifikation
Ausgangszustand
Fasan 13
Löwe 12
Esel 4
Pfau 27
Wolf 31
Jaguar 8
Panther 4
Esel 9
Affe 24
Kamel 45
Giraffe 6
Zebra 10
Tiger 6
Zielzustand
Gorilla 23
Fasan 13
32Einfügen Lösungsstrategie
Situation aktueller Wurzelknoten
existiertneuer Begriff ? aktueller
Begrifflinker Teilbaum nicht leer
Fasan 13
neu
Löwe 12
aktuell
Esel 4
Pfau 27
Wolf 31
Jaguar 8
Panther 4
Esel 9
Affe 24
Kamel 45
Giraffe 6
Zebra 10
Tiger 6
Gorilla 23
33Einfügen Lösungsstrategie
Problemreduktion Einfügen im linken Teilbaum
Fasan 13
neu
Löwe 12
aktuell
Esel 4
Pfau 27
Wolf 31
Jaguar 8
Panther 4
Esel 9
Affe 24
Kamel 45
Giraffe 6
Zebra 10
Tiger 6
Gorilla 23
34Einfügen Lösungsstrategie
Fasan 13
neu
Situation aktueller Wurzelknoten
existiertneuer Begriff gt aktueller
Begriffrechter Teilbaum nicht leer
Löwe 12
Esel 4
Pfau 27
aktuell
Wolf 31
Jaguar 8
Panther 4
Esel 9
Affe 24
Kamel 45
Giraffe 6
Zebra 10
Tiger 6
Gorilla 23
35Einfügen Lösungsstrategie
Fasan 13
neu
Problemreduktion Einfügen im rechten Teilbaum
Löwe 12
Pfau 27
Esel 4
aktuell
Wolf 31
Jaguar 8
Panther 4
Esel 9
Affe 24
Kamel 45
Giraffe 6
Zebra 10
Tiger 6
Gorilla 23
36Einfügen Lösungsstrategie
Fasan 13
neu
Situation aktueller Wurzelknoten
existiertneuer Begriff ? aktueller
Begrifflinker Teilbaum nicht leer
Löwe 12
Esel 4
Pfau 27
Wolf 31
Jaguar 8
Panther 4
Esel 9
aktuell
Affe 24
Kamel 45
Giraffe 6
Zebra 10
Tiger 6
Gorilla 23
37Einfügen Lösungsstrategie
Fasan 13
neu
Problemreduktion Einfügen im linken Teilbaum
Löwe 12
Esel 4
Pfau 27
Wolf 31
Panther 4
Esel 9
Jaguar 8
aktuell
Affe 24
Kamel 45
Giraffe 6
Zebra 10
Tiger 6
Gorilla 23
38Einfügen Lösungsstrategie
Fasan 13
neu
Situation aktueller Wurzelknoten
existiertneuer Begriff ? aktueller
Begrifflinker Teilbaum ist leer
Löwe 12
Esel 4
Pfau 27
Wolf 31
Jaguar 8
Panther 4
Esel 9
Affe 24
Kamel 45
Giraffe 6
Zebra 10
Tiger 6
aktuell
Gorilla 23
39Einfügen Lösungsstrategie
Fasan 13
neu
Problemlösung linker Nachfolger ? neuer Knoten
mit neuem Begriff
Löwe 12
Esel 4
Pfau 27
Wolf 31
Jaguar 8
Panther 4
Esel 9
Affe 24
Kamel 45
Giraffe 6
Zebra 10
Tiger 6
aktuell
Gorilla 23
Fasan 13
40Einfü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
41Einfügen Algorithmus
42Suchen Problemspezifikation
Ausgangszustand
Esel
Suchbegriff
Zielzustand
Suchergebnis Esel 4Esel 9
Löwe 12
Esel 4
Pfau 27
Wolf 31
Jaguar 8
Panther 4
Esel 9
Affe 24
Kamel 45
Giraffe 6
Zebra 10
Tiger 6
Gorilla 23
43Suchen Problemspezifikation
Ausgangszustand
Esel
Suchbegriff
Suchergebnis Esel 4Esel 9
IdeePreorder-Durchlauf mit Aufsammeln aller
Treffer
Löwe 12
Esel 4
Pfau 27
Wolf 31
Jaguar 8
Panther 4
Esel 9
Affe 24
Kamel 45
Giraffe 6
Zebra 10
Tiger 6
Gorilla 23
44Suchen Lösungsstrategie
Situation aktueller Wurzelknoten
existiertSuchbegriff ? aktueller Begriff
Esel
Suchbegriff
Suchergebnis
Löwe 12
aktuell
Esel 4
Pfau 27
Wolf 31
Jaguar 8
Panther 4
Esel 9
Affe 24
Kamel 45
Giraffe 6
Zebra 10
Tiger 6
Gorilla 23
45Suchen Lösungsstrategie
Problemreduktion if Suchbegriff aktueller
Begriff then Daten aufnehmenlinken Teilbaum
durchsuchen
Esel
Suchbegriff
Suchergebnis
Löwe 12
aktuell
Esel 4
Pfau 27
Wolf 31
Jaguar 8
Panther 4
Esel 9
Affe 24
Kamel 45
Giraffe 6
Zebra 10
Tiger 6
Gorilla 23
46Suchen Lösungsstrategie
Esel
Suchbegriff
Situation aktueller Wurzelknoten
existiertSuchbegriff ? aktueller Begriff
Suchergebnis
Löwe 12
Esel 4
Pfau 27
aktuell
Wolf 31
Jaguar 8
Panther 4
Esel 9
Affe 24
Kamel 45
Giraffe 6
Zebra 10
Tiger 6
Gorilla 23
47Suchen Lösungsstrategie
Esel
Suchbegriff
Problemreduktion if Suchbegriff aktueller
Begriff then Daten aufnehmenlinken Teilbaum
durchsuchen
Suchergebnis Esel 4
Löwe 12
Esel 4
Pfau 27
aktuell
Wolf 31
Jaguar 8
Panther 4
Esel 9
Affe 24
Kamel 45
Giraffe 6
Zebra 10
Tiger 6
Gorilla 23
48Suchen Lösungsstrategie
Esel
Suchbegriff
Situation aktueller Wurzelknoten
existiertSuchbegriff ? aktueller Begriff
Suchergebnis Esel 4
Löwe 12
Esel 4
Pfau 27
Wolf 31
Jaguar 8
Panther 4
Esel 9
aktuell
Affe 24
Kamel 45
Giraffe 6
Zebra 10
Tiger 6
Gorilla 23
49Suchen Lösungsstrategie
Esel
Suchbegriff
Problemreduktion if Suchbegriff aktueller
Begriff then Daten aufnehmenlinken Teilbaum
durchsuchen
Suchergebnis Esel 4Esel 9
Löwe 12
Esel 4
Pfau 27
Wolf 31
Jaguar 8
Panther 4
Esel 9
aktuell
Affe 24
Kamel 45
Giraffe 6
Zebra 10
Tiger 6
Gorilla 23
50Suchen Lösungsstrategie
Esel
Suchbegriff
Situation aktueller Wurzelknoten
existiertSuchbegriff gt aktueller Begriff
Suchergebnis Esel 4Esel 9
Löwe 12
Esel 4
Pfau 27
Wolf 31
Jaguar 8
Panther 4
Esel 9
Affe 24
Kamel 45
Giraffe 6
Zebra 10
Tiger 6
aktuell
Gorilla 23
51Suchen Lösungsstrategie
Esel
Suchbegriff
Problemreduktion rechten Teilbaum durchsuchen
Suchergebnis Esel 4Esel 9
Löwe 12
Esel 4
Pfau 27
Wolf 31
Jaguar 8
Panther 4
Esel 9
Affe 24
Kamel 45
Giraffe 6
Zebra 10
Tiger 6
aktuell
Gorilla 23
52Suchen Lösungsstrategie
Esel
Suchbegriff
Situation aktueller Wurzelknoten existiert nicht
Suchergebnis Esel 4Esel 9
Löwe 12
Esel 4
Pfau 27
Wolf 31
Jaguar 8
Panther 4
Esel 9
Affe 24
Kamel 45
Giraffe 6
Zebra 10
Tiger 6
Gorilla 23
aktuell
53Suchen Lösungsstrategie
Esel
Suchbegriff
Problemlösung Mache nichts
Suchergebnis Esel 4Esel 9
Löwe 12
Esel 4
Pfau 27
Wolf 31
Jaguar 8
Panther 4
Esel 9
Affe 24
Kamel 45
Giraffe 6
Zebra 10
Tiger 6
Gorilla 23
aktuell
54Suchen Algorithmus
55Objektorientierte Modellierung
Löwe 12
Esel 4
Pfau 27
Wolf 31
Jaguar 8
Panther 4
Esel 9
0..1
0..2
Knoten
Baum
- begriff string - zeile integer - links
Knoten - rechts Knoten
- wurzel Knoten
kennt
kennt
create(w Knoten) getWurzel Knoten
istLeer boolean initialisieren einfuegen(b
string z integer aktuell TKnoten) suchen(b
string k TKnoten var s TStringList)
ausgeben(k TKnoten var s TStringList)
create(b string z int. l,r
Knoten) getBegriff string getZeile
integer getLinks Knoten getRechts Knoten
56Aufgabe
Im Ordner Suchbaum1 finden Sie ein
vorstrukturiertes Programm zur Erzeugung und
Verarbeitung von Suchbäumen. Implementieren Sie
die Operation einfuegen, suchen und
ausgeben. Zur Kontrolle Suchbaum2
57Teil 3
Zusammenfassung Dynamische Datenstrukturen
58Datenstrukturierung
Ein Grundproblem der Programmierung Daten
möglichst strukturgetreu zu repräsentieren
59Datentypen / Datenstrukturen
Ein Datentyp legt einen Wertebereich und die
Grundoperationen, die auf die Elemente des
Wertebereichs angewandt werden können, fest.
Beispiele (für elementare Datentypen)gt boolean
(Wahrheitswert)gt char (Zeichen)gt
integer (ganze Zahl)gt real (Dezimalzahl)
Eine Datenstruktur legt den Aufbau von komplexen
Wertebereichen aus einfacheren Wertebereichen
fest.
Beispiele (für elementare Datenstrukturen)gt
Reihung / Feld gt Verbund
60Dynamische Datenstrukturen
Dynamische Datenstrukturen werden benutzt, wenn
sich die Struktur der Dateneinheiten zur Laufzeit
dynamisch verändern kann.
61Erzeugung dynamischer Datenstrukturen
Erzeugung mit Hilfe von Referenzattributen
(Pointer)
Erzeugung mit Hilfe vordefinierter KLassen
TList TStringList TStack ...
62Literaturhinweise
Helmut Balzert Lehrbuch Grundlagen der
Informatik. Spektrum Ak. Verlag 1999. H.-P. Gumm
u. M. Sommer Einführung in die Informatik.
Oldenbourg Verlag 2002. ...