12.02.2010 - bei heidingers.de

Werbung
Protokoll der Informatikstunde am 12.02.2010
Protokollantin: Tina Urbanek
MSS 12
Der binäre Baum
a) Baumdiagramm
Ein Element hat mehr als einen Nachfolger(Stammbaum, Prozedurenbaum,
Hierarchiebaum, Organigramm).
b) Binärer Baum
Der binäre Baum hat immer höchstens 2 Nachfolger.
c) Datenstruktur
Wurzel (Anfang)
Knoten(Eingang & 2Ausgänge)
Blätter(nur Eingang -> keine Nachfolger mehr)
Linker
Nachfolger
Rechter
Nachfolger
d) Der Elementarbaum
W
Wurzel
L
Linker
Nachfolger
R
Rechter
Nachfolger
e) Beispiel
A
B
D
H
C
E
F
I
G
J
K
Leseverfahren:
W-> L-> R
ABDHECFIJGK
f) Realisierung
Datensatz mit 2 Zeigern
Adresse
Inhalt
Zeiger links (Zl)
Zeiger rechts(Zr)
1
A
2
3
2
B
4
5
3
C
6
7
4
D
8
NIL
5
E
NIL
NIL
6
F
9
10
7
G
11
NIL
8
H
NIL
NIL
9
I
NIL
NIL
10
J
NIL
NIL
11
K
NIL
NIL
NIL= not in list (kennzeichnet Ende der Verzweigung)
Die Listenreihenfolge ist beliebig, da die Struktur allein durch die Zeiger realisiert wird.
g) Pascalstruktur
TYPE zeiger = ^element;
element = RECORD
Knoten : CHAR;
zl, zr : zeiger;
END;
h) Der Algorithmus
1. Grobstruktur:
1. Wurzel ausgeben
2. Wenn Linksbaum nicht leer, dann Linksbaum weiterbearbeiten sonst,
wenn Rechtsbaum nicht leer, dann Rechtsbaum.
2. PASCAL
PROCEDURE baumwlr (p:zeiger);
BEGIN
WRITE (p^.knoten);
IF p^.zl <> NIL THEN baumwlr (p^.zl);
IF p^.zr <> NIL THEN baumwlr (p^.zr);
END;
i) Aufbau eines Baumes
Ziel: sortierte Reihenfolge bei WLR- Ausgabe
1. Grobstruktur
1) Freien Ast finden (Zeiger = NIL)
2) Neues Element erzeugen; beide Zeiger auf NIL setzen
3) Wenn der Ast noch nicht frei ist
- mit dem neuen Element vergleichen
1. schon vorhanden
Fehlermeldung
2. kleiner als neues Element
links weiter
3. größer als neues Element
rechts weiter
2. PASCAL
PROCEDURE einfuegen (VAR p: zeiger, x: CHAR);
BEGIN IF p= NIL THEN
BEGIN NEW (p);
p^.knoten:= x; p^.zl:= NIL; p^.zr:= NIL; END;
ELSE IF p^.knoten= x THEN WRITELN (`Element vorhanden`)
ELSE IF p^.knoten > x THEN einfuegen (p^.zl,x);
ELSE einfuegen (p^.zr,x);
END;
Herunterladen