Algo Dat
Algo Dat
Kapitel
BÄUME
(Teil1)
GRUNDLAGEN
1. Einführung
2. Algorithmen
3. EigenschaCen
von
Programmiersprachen
4. Algorithmenparadigmen
5. Suchen
&
SorLeren
6. Hashing
7. Komplexität
von
Algorithmen
8. Abstrakte
Datentypen
(ADT)
9. Listen
10. Bäume
11. Graphen
Lernziele
des
Kapitels
2
2
¨ Verstehen,
was
ein
Baum
(in
der
InformaLk)
ist?
¨ Kennenlernen
von
verschiedenen
Baumarten.
¨ ADT
Baum
(Tree)
kennenlernen.
¨ Den
ADT
Tree
mit
seinen
verschiedenen
OperaLonen
in
Java
implemenLeren
können.
¨ Spezielle
Ausprägung
von
Bäumen
kennenlernen.
Inhalt
3
1. Einführung
2. Bäume
–
Begriffe,
DefiniLon
3. Binäre
Bäume,
binäre
Suchbäume
4. Balancierte
Bäume
n AVL-‐Bäume
n B-‐Bäume
5. Weitere
Bäume
6. SorLeren
mit
Bäumen:
Heapsort
Anwendungen
von
Bäumen
5
o Familienstammbuch
o Ergebnisse
eines
Sporkurniers
(„KO-‐System“)
o Organigramm
o Gliederung
eines
Buches
o Datei-‐Struktur
im
Rechner
o Maximum-‐BesLmmung
rekursiv
o ArithmeLscher
Ausdruck
o …
Baum
–
Begriffe
1/7
6
o Dynamische
Datenstruktur
o Anzahl
der
Elemente
beliebig:
0
..
∞
o FunkLonen
¤ Erzeugen
à
leerer
Baum
¤ Einfügen
à
Baum
mit
einem
Element
mehr
¤ Rausnehmen
à
Baum
mit
einem
Element
weniger
¤ Nachschauen,
ob
der
Baum
leer
ist
o Spezieller
Graph
¤ Zusammenhängender,
zyklenfreier
Graph
Baum
–
Begriffe
3/7
8
o Baum
=
Menge
von
Knoten
und
Kanten,
die
besondere
EigenschaCen
aufweisen.
o Jeder
Baum
besitzt
einen
ausgezeichneten
Knoten,
die
Wurzel
(root);
Ausnahme:
leerer
Baum.
o Jeder
Knoten,
außer
der
Wurzel
ist
durch
genau
eine
Kante
mit
seinem
Vaterknoten
(parent,
Synonyme:
Muker,
Elternknoten,
Vorgänger)
verbunden.
Er
wird
Kind
(child
,
Synonyme:
Tochter,
Sohn,
Nachfolger)
dieses
Knotens
genannt.
o Ein
Knoten
ohne
Kinder
heißt
Bla/
(leaf),
alle
anderen
Knoten
nennt
man
innere
Knoten.
Baum
–
Begriffe
4/7
9
Vater
Kind
Baum
–
Begriffe
5/7
10
o Ein
Pfad
(path)
in
einem
Baum
ist
eine
Folge
von
unterschiedlichen
Knoten,
in
der
die
aufeinander
folgenden
Knoten
durch
Kanten
miteinander
verbunden
sind.
o Zwischen
jedem
Knoten
und
der
Wurzel
gibt
es
genau
einen
Pfad.
Das
bedeutet
dass
→ ein
Baum
zusammenhängend
ist
und
→ es
keine
Zyklen
gibt.
o Das
Niveau
(level)
eines
Knotens
ist
die
Länge
des
Pfades
von
der
Wurzel
zu
diesem
Knoten.
o Die
Höhe
(height)
eines
Baumes
entspricht
dem
größten
level
eines
Blakes
+
1.
o Es
gibt
verschiedene
Arten
von
Bäumen.
Sie
können
dadurch
charakterisiert
sein,
dass
jeder
Knoten
eine
besLmmte
Anzahl
von
direkten
Kindern
haben
muss
und
wie
die
Kinder
angeordnet
sind.
Baum
–
Begriffe
6/7
11
Höhe
4
Niveau/Level Pfad
1 Unterbaum
3
Baum
–
Begriffe
7/7
12
¨ Bei
Vorgabe
der
Anzahl
von
Kindern:
n-‐ärer
Baum
(n-‐ary
tree).
¨ Sind
die
Kinder
jedes
Knotens
in
einer
besLmmten
Reihenfolge
geordnet:
geordneter
Baum
(ordered
tree).
¨ Binärer
Baum
=
geordneter
Baum,
bei
welchem
jeder
Knoten
maximal
2
Kinder
hat.
¨ Beispiel:
arithmeLscher
Ausdruck
als
Baum
8
+
(5
–
3)
*
4
8 *
- 4
5 3
Visualisierung
1/2
13
o Nicht-‐leerer Baum
Baum
Wert
Wert Wert
Wert Wert
Visualisierung
2/2
14
o Baumknoten…
etwas
allgemeiner
Wert
Ein
Mehrere Wert und
Werte und Wert Wert unbeschränkt viele Kinder
Kinder
Keine Werte in
inneren Knoten
und spezieller
Blatt-
Datentyp
Wert
Tree
–
ImplemenLerung
17
Knotenklasse
class TreeNode {// Node of a binary tree public int getElement () {
int elem; return elem;
TreeNode left; }
TreeNode right;
public void setLeft (TreeNode n) {
public TreeNode (int i) { left = n;
elem = i; }
left = right = null;
} public void setRight (TreeNode n) {
right = n;
public TreeNode getLeft () { }
return left;
} public void setElement (int e) {
elem = e;
public TreeNode getRight () { }
return right;
}
Tree
–
ImplemenLerung
(allg.)
18
o Knotenklasse
class TreeNode {// Node of a binary tree public Element getElement () {
Element elem; return elem;
TreeNode left; }
TreeNode right;
public void setLeft (TreeNode n) {
public TreeNode (Element i) { left = n;
elem = i; }
left = right = null;
} public void setRight (TreeNode n) {
right = n;
public TreeNode getLeft () { }
return left;
} public void setElement (Element e) {
elem = e;
public TreeNode getRight () { }
return right;
}
Algorithmen
zur
Traversierung
1/2
20
B C
D E F G
Start:
wurzel
7
linker
Unterbaum
(Wurzel
4)
linker
Unterbaum
(Wurzel
1)
linker
Unterbaum
(null)
7
Wurzel
1
1
rechter
Unterbaum
(null)
Wurzel
4
4
rechter
Unterbaum
(Wurzel
6)
linker
Unterbaum
(null)
4 9
Wurzel
6
6
rechter
Unterbaum
(null)
Wurzel
7
7
rechter
Unterbaum
(Wurzel
9)
1 6 8
linker
Unterbaum
(Wurzel
8)
linker
Unterbaum
(null)
Wurzel
8
8
rechter
Unterbaum
(null)
...
Traversieren
von
Bäumen:
Preorder
23
Start:
wurzel
7
Wurzel
7
7
linker
Unterbaum
(Wurzel
4)
Wurzel
4
4
7
linker
Unterbaum
(Wurzel
1)
Wurzel
1
1
linker
Unterbaum
(null)
rechter
Unterbaum
(null)
rechter
Unterbaum
(Wurzel
6)
4 9
Wurzel
6
6
linker
Unterbaum
(null)
rechter
Unterbaum
(null)
rechter
Unterbaum
(Wurzel
9)
Wurzel
9
9
1 6 8
linker
Unterbaum
(Wurzel
8)
Wurzel
8
8
linker
Unterbaum
(null)
...
Algorithmus
-‐
Inorder
24
Inorder
(k)
Eingabe:
Knoten
k
eines
binären
Baums
mit
Verweis
auf
linken
([Link])
und
rechten
([Link])
Teilbaum
sowie
dem
Element
[Link].
Inorder
([Link]);
//
besuche
den
linken
Teilbaum
Verarbeite
[Link];
Inorder
([Link]);
//
besuche
den
rechten
Teilbaum
Algorithmus
-‐
Preorder
25
Preorder
(k)
Eingabe:
Knoten
k
eines
binären
Baums
mit
Verweis
auf
linken
([Link])
und
rechten
([Link])
Teilbaum
sowie
dem
Element
[Link].
Verarbeite
[Link];
Preorder
([Link]);
//
besuche
den
linken
Teilbaum
Preorder
([Link]);
//
besuche
den
rechten
Teilbaum
Preorder
–
Programm
26
Postorder
(k)
Eingabe:
Knoten
k
eines
binären
Baums
mit
Verweis
auf
linken
([Link])
und
rechten
([Link])
Teilbaum
sowie
dem
Element
[Link].
Postorder
([Link]);
//
besuche
den
linken
Teilbaum
Postorder
([Link]);
//
besuche
den
rechten
Teilbaum
Verarbeite
[Link];
Algorithmus
-‐
Levelorder
28
Levelorder
(k)
Eingabe:
Knoten
k
eines
binären
Baums
mit
Verweis
auf
linken
([Link])
und
rechten
([Link])
Teilbaum
sowie
dem
Element
[Link].
queue
:=
leere
Warteschlange;
//
vom
Typ
Queue
enter
(k,
q);
//
(aktuelle)
Wurzel
in
queue
aufnehmen
while
not
isEmpty(q)
do
Knoten
n
:=
leave
(q);
Verarbeite
[Link];
enter
([Link],
q);
//
linken
Sohn
in
queue
aufnehmen
enter
([Link],
q);
//
rechten
Sohn
in
queue
aufnehmen
od
Suchbäume
1/2
29
x7
4 9
Werte Werte
<7 >7
1 6 8
Suchbäume
2/2
31
⇒ Die
Elemente
in
einem
Suchbaum
sind
nach
ihrem
Schlüsselwert
angeordnet.
⇒ Auf
den
Schlüsseln
der
Elemente
ist
eine
totale
Ordnung
definiert.
⇒ Es
wird
eine
VergleichsoperaLon
(compareTo)
für
die
Schlüssel
bereit
gestellt.
Binärbaum
-‐
Einfügen
32
insert D
F
C I
A E G J
node D
remove F F node
tmp C I
A E G J
D H
E
child
C I
H
Binärbaum
–
Löschen/Fälle
2/2
40
remove D F parent
node D I
A E G J
C H
tmp
F
C I
child
A E G J
Löschen eines inneren Knotens
H
Komplexität
der
OperaLonen
1/2
41