Algorithmen und Datenstrukturen

Werbung
SS16
Algorithmen und Datenstrukturen
3. Kapitel
Binärbäume
Martin Dietzfelbinger
April 2016
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
3.1 Binärbäume: Grundlagen
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
1
3.1 Binärbäume: Grundlagen
Der Datentyp (und die Datenstruktur) Binärbaum tritt überall
in der Informatik auf:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
1
3.1 Binärbäume: Grundlagen
Der Datentyp (und die Datenstruktur) Binärbaum tritt überall
in der Informatik auf:
• als binärer Suchbaum
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
1
3.1 Binärbäume: Grundlagen
Der Datentyp (und die Datenstruktur) Binärbaum tritt überall
in der Informatik auf:
• als binärer Suchbaum
• als Repräsentation von binären Ausdrücken
(logisch, arithmetisch)
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
1
3.1 Binärbäume: Grundlagen
Der Datentyp (und die Datenstruktur) Binärbaum tritt überall
in der Informatik auf:
• als binärer Suchbaum
• als Repräsentation von binären Ausdrücken
(logisch, arithmetisch)
• als Entscheidungsbaum
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
1
3.1 Binärbäume: Grundlagen
Der Datentyp (und die Datenstruktur) Binärbaum tritt überall
in der Informatik auf:
• als binärer Suchbaum
• als Repräsentation von binären Ausdrücken
(logisch, arithmetisch)
• als Entscheidungsbaum
• als Codierungs-/Decodierungsbaum
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
1
3.1 Binärbäume: Grundlagen
Der Datentyp (und die Datenstruktur) Binärbaum tritt überall
in der Informatik auf:
• als binärer Suchbaum
• als Repräsentation von binären Ausdrücken
(logisch, arithmetisch)
• als Entscheidungsbaum
• als Codierungs-/Decodierungsbaum
• als binärer Heap (später)
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
1
3.1 Binärbäume: Grundlagen
Der Datentyp (und die Datenstruktur) Binärbaum tritt überall
in der Informatik auf:
• als binärer Suchbaum
• als Repräsentation von binären Ausdrücken
(logisch, arithmetisch)
• als Entscheidungsbaum
• als Codierungs-/Decodierungsbaum
• als binärer Heap (später)
• ...
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
1
Beispiel 1:
Arithmetischer Ausdruck mit zweistelligen Operatoren:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
2
Beispiel 1:
Arithmetischer Ausdruck mit zweistelligen Operatoren:
((((x2 · x4) + ((x3 − x7) − (x6/x1))) + (x5 · (x9 · x3)))
/ ((x5 − x6) − x1))
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
2
/
−
+
−
x2
x4
FG KTuEA, TU Ilmenau
x9
/
x7
x5
x5
−
x3
x1
−
+
x6
x6
x3
x1
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
3
Auswertung:
1) Ordne den Blättern konkrete Werte zu,
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
4
Auswertung:
1) Ordne den Blättern konkrete Werte zu, z.B. x1 = 5,
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
4
Auswertung:
1) Ordne den Blättern konkrete Werte zu, z.B. x1 = 5, x2 = 3,
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
4
Auswertung:
1) Ordne den Blättern konkrete Werte zu, z.B. x1 = 5, x2 = 3,
x3 = −2,
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
4
Auswertung:
1) Ordne den Blättern konkrete Werte zu, z.B. x1 = 5, x2 = 3,
x3 = −2, x4 = −7,
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
4
Auswertung:
1) Ordne den Blättern konkrete Werte zu, z.B. x1 = 5, x2 = 3,
x3 = −2, x4 = −7, x5 = 7,
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
4
Auswertung:
1) Ordne den Blättern konkrete Werte zu, z.B. x1 = 5, x2 = 3,
x3 = −2, x4 = −7, x5 = 7, x6 = 10,
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
4
Auswertung:
1) Ordne den Blättern konkrete Werte zu, z.B. x1 = 5, x2 = 3,
x3 = −2, x4 = −7, x5 = 7, x6 = 10, x7 = 5,
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
4
Auswertung:
1) Ordne den Blättern konkrete Werte zu, z.B. x1 = 5, x2 = 3,
x3 = −2, x4 = −7, x5 = 7, x6 = 10, x7 = 5, x9 = −5.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
4
Auswertung:
1) Ordne den Blättern konkrete Werte zu, z.B. x1 = 5, x2 = 3,
x3 = −2, x4 = −7, x5 = 7, x6 = 10, x7 = 5, x9 = −5.
2) Werte aus, von den Blättern startend ( bottom-up“).
”
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
4
Auswertung:
1) Ordne den Blättern konkrete Werte zu, z.B. x1 = 5, x2 = 3,
x3 = −2, x4 = −7, x5 = 7, x6 = 10, x7 = 5, x9 = −5.
2) Werte aus, von den Blättern startend ( bottom-up“).
”
/ −5
40
+
−
−30
+
3
−9
−7 −
−7
FG KTuEA, TU Ilmenau
7
2
5
−
10
−
−2
−3
70
−21
10
/
−5
−8
7
5
10
−2
5
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
4
Beispiel 2: Codierungs-/Decodierungsbaum
Zeichen aus Alphabet Σ erhalten binäre Codes.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
5
Beispiel 2: Codierungs-/Decodierungsbaum
Zeichen aus Alphabet Σ erhalten binäre Codes.
Diese können auch verschiedene Länge haben:
Wenige Bits für häufige Buchstaben, viele Bits für seltene.“
”
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
5
Beispiel 2: Codierungs-/Decodierungsbaum
Zeichen aus Alphabet Σ erhalten binäre Codes.
Diese können auch verschiedene Länge haben:
Wenige Bits für häufige Buchstaben, viele Bits für seltene.“
”
Mini-Beispiel:
A
1100
B
0110
FG KTuEA, TU Ilmenau
C
000
D
111
E
10
F
0011
G
010
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
H
0010
I
0111
K
1101
5
Beispiel 2: Codierungs-/Decodierungsbaum
Zeichen aus Alphabet Σ erhalten binäre Codes.
Diese können auch verschiedene Länge haben:
Wenige Bits für häufige Buchstaben, viele Bits für seltene.“
”
Mini-Beispiel:
A
1100
B
0110
C
000
D
111
E
10
F
0011
G
010
H
0010
I
0111
K
1101
Zur Codierung von Zeichenreihen benutzt man direkt die
Tabelle.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
5
Beispiel 2: Codierungs-/Decodierungsbaum
Zeichen aus Alphabet Σ erhalten binäre Codes.
Diese können auch verschiedene Länge haben:
Wenige Bits für häufige Buchstaben, viele Bits für seltene.“
”
Mini-Beispiel:
A
1100
B
0110
C
000
D
111
E
10
F
0011
G
010
H
0010
I
0111
K
1101
Zur Codierung von Zeichenreihen benutzt man direkt die
Tabelle.
Beispiel:
FEIGE hat Codierung
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
5
Beispiel 2: Codierungs-/Decodierungsbaum
Zeichen aus Alphabet Σ erhalten binäre Codes.
Diese können auch verschiedene Länge haben:
Wenige Bits für häufige Buchstaben, viele Bits für seltene.“
”
Mini-Beispiel:
A
1100
B
0110
C
000
D
111
E
10
F
0011
G
010
H
0010
I
0111
K
1101
Zur Codierung von Zeichenreihen benutzt man direkt die
Tabelle.
Beispiel:
FEIGE hat Codierung 0011
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
5
Beispiel 2: Codierungs-/Decodierungsbaum
Zeichen aus Alphabet Σ erhalten binäre Codes.
Diese können auch verschiedene Länge haben:
Wenige Bits für häufige Buchstaben, viele Bits für seltene.“
”
Mini-Beispiel:
A
1100
B
0110
C
000
D
111
E
10
F
0011
G
010
H
0010
I
0111
K
1101
Zur Codierung von Zeichenreihen benutzt man direkt die
Tabelle.
Beispiel:
FEIGE hat Codierung 0011 10
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
5
Beispiel 2: Codierungs-/Decodierungsbaum
Zeichen aus Alphabet Σ erhalten binäre Codes.
Diese können auch verschiedene Länge haben:
Wenige Bits für häufige Buchstaben, viele Bits für seltene.“
”
Mini-Beispiel:
A
1100
B
0110
C
000
D
111
E
10
F
0011
G
010
H
0010
I
0111
K
1101
Zur Codierung von Zeichenreihen benutzt man direkt die
Tabelle.
Beispiel:
FEIGE hat Codierung 0011 10 0111
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
5
Beispiel 2: Codierungs-/Decodierungsbaum
Zeichen aus Alphabet Σ erhalten binäre Codes.
Diese können auch verschiedene Länge haben:
Wenige Bits für häufige Buchstaben, viele Bits für seltene.“
”
Mini-Beispiel:
A
1100
B
0110
C
000
D
111
E
10
F
0011
G
010
H
0010
I
0111
K
1101
Zur Codierung von Zeichenreihen benutzt man direkt die
Tabelle.
Beispiel:
FEIGE hat Codierung 0011 10 0111 010
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
5
Beispiel 2: Codierungs-/Decodierungsbaum
Zeichen aus Alphabet Σ erhalten binäre Codes.
Diese können auch verschiedene Länge haben:
Wenige Bits für häufige Buchstaben, viele Bits für seltene.“
”
Mini-Beispiel:
A
1100
B
0110
C
000
D
111
E
10
F
0011
G
010
H
0010
I
0111
K
1101
Zur Codierung von Zeichenreihen benutzt man direkt die
Tabelle.
Beispiel:
FEIGE hat Codierung 0011 10 0111 010 10.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
5
Beispiel 2: Codierungs-/Decodierungsbaum
Zeichen aus Alphabet Σ erhalten binäre Codes.
Diese können auch verschiedene Länge haben:
Wenige Bits für häufige Buchstaben, viele Bits für seltene.“
”
Mini-Beispiel:
A
1100
B
0110
C
000
D
111
E
10
F
0011
G
010
H
0010
I
0111
K
1101
Zur Codierung von Zeichenreihen benutzt man direkt die
Tabelle.
Beispiel:
FEIGE hat Codierung 001110011101010.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
5
Präfixfreier“ Code: Kein Codewort ist Anfangsstück eines
”
anderen. Damit: eindeutig decodierbar“;
”
Fuge zwischen Codes für Buchstaben muss nicht markiert werden: Schreibe 001110011101010 statt 0011 10 0111 010 10.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
6
Präfixfreier“ Code: Kein Codewort ist Anfangsstück eines
”
anderen. Damit: eindeutig decodierbar“;
”
Fuge zwischen Codes für Buchstaben muss nicht markiert werden: Schreibe 001110011101010 statt 0011 10 0111 010 10.
Kompakte Repräsentation des Codes als Binärbaum:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
6
Präfixfreier“ Code: Kein Codewort ist Anfangsstück eines
”
anderen. Damit: eindeutig decodierbar“;
”
Fuge zwischen Codes für Buchstaben muss nicht markiert werden: Schreibe 001110011101010 statt 0011 10 0111 010 10.
Kompakte Repräsentation des Codes als Binärbaum:
0
0
0
C
FG KTuEA, TU Ilmenau
1
1
0
H
1
1
F
0
G
0
E
0
1
0
B
1
1
I
0
A
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
1
D
1
K
6
0
0
0
C
FG KTuEA, TU Ilmenau
1
1
0
H
1
1
F
0
G
0
E
0
1
0
B
1
1
I
0
A
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
1
D
1
K
7
0
0
0
C
1
1
0
H
1
1
F
0
G
0
E
0
1
0
B
1
1
I
0
A
1
D
1
K
Blätter sind mit Buchstaben markiert; Weg von der Wurzel
zum Blatt gibt das Codewort wieder (links: 0, rechts: 1).
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
7
0
0
0
C
1
1
0
H
1
1
F
0
G
0
E
0
1
0
B
1
1
I
0
A
1
D
1
K
Blätter sind mit Buchstaben markiert; Weg von der Wurzel
zum Blatt gibt das Codewort wieder (links: 0, rechts: 1).
Decodierung: Laufe Weg im Baum, vom Codewort gesteuert,
bis zum Blatt.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
7
0
0
0
C
1
1
0
H
1
1
F
0
G
0
E
0
1
0
B
1
1
I
0
A
1
D
1
K
Blätter sind mit Buchstaben markiert; Weg von der Wurzel
zum Blatt gibt das Codewort wieder (links: 0, rechts: 1).
Decodierung: Laufe Weg im Baum, vom Codewort gesteuert,
bis zum Blatt.
Wegen Präfixeigenschaft: im Code keine Zwischenräume nötig.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
7
0
0
0
C
1
1
0
H
1
1
F
0
G
0
E
0
1
0
B
1
1
I
0
A
1
D
1
K
Blätter sind mit Buchstaben markiert; Weg von der Wurzel
zum Blatt gibt das Codewort wieder (links: 0, rechts: 1).
Decodierung: Laufe Weg im Baum, vom Codewort gesteuert,
bis zum Blatt.
Wegen Präfixeigenschaft: im Code keine Zwischenräume nötig.
Beispiel: 0000010100011 liefert
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
7
0
0
0
C
1
1
0
H
1
1
F
0
G
0
E
0
1
0
B
1
1
I
0
A
1
D
1
K
Blätter sind mit Buchstaben markiert; Weg von der Wurzel
zum Blatt gibt das Codewort wieder (links: 0, rechts: 1).
Decodierung: Laufe Weg im Baum, vom Codewort gesteuert,
bis zum Blatt.
Wegen Präfixeigenschaft: im Code keine Zwischenräume nötig.
Beispiel: 0000010100011 liefert C
”
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
7
0
0
0
C
1
1
0
H
1
1
F
0
G
0
E
0
1
0
B
1
1
I
0
A
1
D
1
K
Blätter sind mit Buchstaben markiert; Weg von der Wurzel
zum Blatt gibt das Codewort wieder (links: 0, rechts: 1).
Decodierung: Laufe Weg im Baum, vom Codewort gesteuert,
bis zum Blatt.
Wegen Präfixeigenschaft: im Code keine Zwischenräume nötig.
Beispiel: 0000010100011 liefert CH
”
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
7
0
0
0
C
1
1
0
H
1
1
F
0
G
0
E
0
1
0
B
1
1
I
0
A
1
D
1
K
Blätter sind mit Buchstaben markiert; Weg von der Wurzel
zum Blatt gibt das Codewort wieder (links: 0, rechts: 1).
Decodierung: Laufe Weg im Baum, vom Codewort gesteuert,
bis zum Blatt.
Wegen Präfixeigenschaft: im Code keine Zwischenräume nötig.
Beispiel: 0000010100011 liefert CHE
”
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
7
0
0
0
C
1
1
0
H
1
1
F
0
G
0
E
0
1
0
B
1
1
I
0
A
1
D
1
K
Blätter sind mit Buchstaben markiert; Weg von der Wurzel
zum Blatt gibt das Codewort wieder (links: 0, rechts: 1).
Decodierung: Laufe Weg im Baum, vom Codewort gesteuert,
bis zum Blatt.
Wegen Präfixeigenschaft: im Code keine Zwischenräume nötig.
Beispiel: 0000010100011 liefert CHEF
”
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
7
0
0
0
C
1
1
0
H
1
1
F
0
G
0
E
0
1
0
B
1
1
I
0
A
1
D
1
K
Blätter sind mit Buchstaben markiert; Weg von der Wurzel
zum Blatt gibt das Codewort wieder (links: 0, rechts: 1).
Decodierung: Laufe Weg im Baum, vom Codewort gesteuert,
bis zum Blatt.
Wegen Präfixeigenschaft: im Code keine Zwischenräume nötig.
Beispiel: 0000010100011 liefert CHEF“.
”
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
7
Binärbaum-Terminologie: Überblick
Wurzel
linkes Kind
von v2
v1
Kante/Zeiger
v2
Vater von
v5
v6
v3
v4
v7
v10
l8
l4 v
8
l0
l1
l7
l2
l5
FG KTuEA, TU Ilmenau
rechtes Kind
von v5
v9
l3
v9
l9
l10
Blatt,
externer/äußerer Knoten
l6
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
8
Mathematische Struktur: flach“
”
Definition 3.1.1
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
9
Mathematische Struktur: flach“
”
Definition 3.1.1
Ein Binärbaum T besteht
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
9
Mathematische Struktur: flach“
”
Definition 3.1.1
Ein Binärbaum T besteht aus einer endlichen Menge V von
inneren“ Knoten,
”
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
9
Mathematische Struktur: flach“
”
Definition 3.1.1
Ein Binärbaum T besteht aus einer endlichen Menge V von
inneren“ Knoten, einer dazu disjunkten endlichen Menge L
”
von äußeren“ Knoten
”
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
9
Mathematische Struktur: flach“
”
Definition 3.1.1
Ein Binärbaum T besteht aus einer endlichen Menge V von
inneren“ Knoten, einer dazu disjunkten endlichen Menge L
”
von äußeren“ Knoten sowie einer injektiven Funktion
”
child : V × {left, right} → V ∪ L,
wobei Folgendes gilt:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
9
Mathematische Struktur: flach“
”
Definition 3.1.1
Ein Binärbaum T besteht aus einer endlichen Menge V von
inneren“ Knoten, einer dazu disjunkten endlichen Menge L
”
von äußeren“ Knoten sowie einer injektiven Funktion
”
child : V × {left, right} → V ∪ L,
wobei Folgendes gilt:
(i) In V ∪ L gibt es genau einen Knoten r, der nicht als Wert
child(v, left ) oder child(v, right ) vorkommt.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
9
Mathematische Struktur: flach“
”
Definition 3.1.1
Ein Binärbaum T besteht aus einer endlichen Menge V von
inneren“ Knoten, einer dazu disjunkten endlichen Menge L
”
von äußeren“ Knoten sowie einer injektiven Funktion
”
child : V × {left, right} → V ∪ L,
wobei Folgendes gilt:
(i) In V ∪ L gibt es genau einen Knoten r, der nicht als Wert
child(v, left ) oder child(v, right ) vorkommt.
Dieser Knoten r heißt die Wurzel.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
9
Mathematische Struktur: flach“ (Forts.)
”
child(v, left ) [child(v, right )] heißt das linke [rechte] Kind
von v ∈ V .
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
10
Mathematische Struktur: flach“ (Forts.)
”
child(v, left ) [child(v, right )] heißt das linke [rechte] Kind
von v ∈ V .
Weil child injektiv ist,
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
10
Mathematische Struktur: flach“ (Forts.)
”
child(v, left ) [child(v, right )] heißt das linke [rechte] Kind
von v ∈ V .
Weil child injektiv ist, gibt es für jeden Knoten w ∈ (V ∪ L)
mit w 6= r genau einen Knoten u ∈ V mit w = child(u, left)
oder w = child(u, right) (aber nicht beides).
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
10
Mathematische Struktur: flach“ (Forts.)
”
child(v, left ) [child(v, right )] heißt das linke [rechte] Kind
von v ∈ V .
Weil child injektiv ist, gibt es für jeden Knoten w ∈ (V ∪ L)
mit w 6= r genau einen Knoten u ∈ V mit w = child(u, left)
oder w = child(u, right) (aber nicht beides).
Dieser Knoten u wird mit p(w) bezeichnet und heißt der
Vorgängerknoten oder Vaterknoten von w.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
10
Mathematische Struktur: flach“ (Forts.)
”
child(v, left ) [child(v, right )] heißt das linke [rechte] Kind
von v ∈ V .
Weil child injektiv ist, gibt es für jeden Knoten w ∈ (V ∪ L)
mit w 6= r genau einen Knoten u ∈ V mit w = child(u, left)
oder w = child(u, right) (aber nicht beides).
Dieser Knoten u wird mit p(w) bezeichnet und heißt der
Vorgängerknoten oder Vaterknoten von w.
Wir sagen:
Von p(w) nach w
verläuft eine Kante.
w heißt [linkes bzw. rechtes]
Kind von p(w).
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
10
Mathematische Struktur: flach“ (Forts.)
”
Die folgende Struktur erfüllt (i), ist aber kein Binärbaum:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
11
Mathematische Struktur: flach“ (Forts.)
”
Die folgende Struktur erfüllt (i), ist aber kein Binärbaum:
(ii) Kreisfreiheit“: Für jeden Knoten w ∈ V ∪ L gilt:
”
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
11
Mathematische Struktur: flach“ (Forts.)
”
Die folgende Struktur erfüllt (i), ist aber kein Binärbaum:
(ii) Kreisfreiheit“: Für jeden Knoten w ∈ V ∪ L gilt:
”
Die Folge v0 = w,
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
11
Mathematische Struktur: flach“ (Forts.)
”
Die folgende Struktur erfüllt (i), ist aber kein Binärbaum:
(ii) Kreisfreiheit“: Für jeden Knoten w ∈ V ∪ L gilt:
”
Die Folge v0 = w, v1 = p(w),
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
11
Mathematische Struktur: flach“ (Forts.)
”
Die folgende Struktur erfüllt (i), ist aber kein Binärbaum:
(ii) Kreisfreiheit“: Für jeden Knoten w ∈ V ∪ L gilt:
”
Die Folge v0 = w, v1 = p(w), v2 = p(v1),
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
11
Mathematische Struktur: flach“ (Forts.)
”
Die folgende Struktur erfüllt (i), ist aber kein Binärbaum:
(ii) Kreisfreiheit“: Für jeden Knoten w ∈ V ∪ L gilt:
”
Die Folge v0 = w, v1 = p(w), v2 = p(v1), v3 = p(v2),
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
11
Mathematische Struktur: flach“ (Forts.)
”
Die folgende Struktur erfüllt (i), ist aber kein Binärbaum:
(ii) Kreisfreiheit“: Für jeden Knoten w ∈ V ∪ L gilt:
”
Die Folge v0 = w, v1 = p(w), v2 = p(v1), v3 = p(v2), . . .
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
11
Mathematische Struktur: flach“ (Forts.)
”
Die folgende Struktur erfüllt (i), ist aber kein Binärbaum:
(ii) Kreisfreiheit“: Für jeden Knoten w ∈ V ∪ L gilt:
”
Die Folge v0 = w, v1 = p(w), v2 = p(v1), v3 = p(v2), . . .
bricht nach endlich vielen Schritten mit einem vd = r ab.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
11
Mathematische Struktur: flach“ (Forts.)
”
Die folgende Struktur erfüllt (i), ist aber kein Binärbaum:
(ii) Kreisfreiheit“: Für jeden Knoten w ∈ V ∪ L gilt:
”
Die Folge v0 = w, v1 = p(w), v2 = p(v1), v3 = p(v2), . . .
bricht nach endlich vielen Schritten mit einem vd = r ab.
(Dadurch ist ein eindeutiger Weg von w zur Wurzel festgelegt. Jeder
Knoten des Binärbaums ist von der Wurzel aus erreichbar.)
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
11
Mathematische Struktur: flach“ (Forts.)
”
0
0
0
C
FG KTuEA, TU Ilmenau
1
1
0
H
1
1
F
0
G
0
E
0
1
0
B
1
1
I
0
A
1
D
1
K
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
12
Mathematische Struktur: flach“ (Forts.)
”
0
0
0
C
1
1
0
H
1
1
F
0
G
0
E
0
1
0
B
1
1
I
0
A
1
D
1
K
Knoten und Kanten können Markierungen (oder Beschriftungen) tragen, die auch als Funktionen dargestellt werden.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
12
Mathematische Struktur: flach“ (Forts.)
”
0
0
0
C
1
1
0
H
1
1
F
0
G
0
E
0
1
0
B
1
1
I
0
A
1
D
1
K
Knoten und Kanten können Markierungen (oder Beschriftungen) tragen, die auch als Funktionen dargestellt werden.
Knotenmarkierungen:
(D, Z sind beliebige Mengen.)
Funktionen mV : V → D und mL : L → Z.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
12
Mathematische Struktur: flach“ (Forts.)
”
0
0
0
C
1
1
0
H
1
1
F
0
G
0
E
0
1
0
B
1
1
I
0
A
1
D
1
K
Knoten und Kanten können Markierungen (oder Beschriftungen) tragen, die auch als Funktionen dargestellt werden.
Knotenmarkierungen:
(D, Z sind beliebige Mengen.)
Funktionen mV : V → D und mL : L → Z.
Kantenmarkierungen:
(X ist beliebige Menge.)
Funktion mK : V × {left, right} → X .
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
12
Mathematische Struktur: rekursiv
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
13
Mathematische Struktur: rekursiv
D: Menge von Knotenmarkierungen
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
13
Mathematische Struktur: rekursiv
D: Menge von Knotenmarkierungen
Z: Menge von Blattmarkierungen
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
13
Mathematische Struktur: rekursiv
D: Menge von Knotenmarkierungen
Z: Menge von Blattmarkierungen
(Induktive) Definition 3.1.2
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
13
Mathematische Struktur: rekursiv
D: Menge von Knotenmarkierungen
Z: Menge von Blattmarkierungen
(Induktive) Definition 3.1.2
(i) Wenn z ∈ Z, dann ist (z) ein (D, Z)-Binärbaum.
// Blatt mit Markierung z. Auch: z (ohne Klammern), z
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
13
Mathematische Struktur: rekursiv
D: Menge von Knotenmarkierungen
Z: Menge von Blattmarkierungen
(Induktive) Definition 3.1.2
(i) Wenn z ∈ Z, dann ist (z) ein (D, Z)-Binärbaum.
// Blatt mit Markierung z. Auch: z (ohne Klammern), z
(ii) Wenn T1, T2 (D, Z)-Binärbäume sind und x ∈ D ist
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
13
Mathematische Struktur: rekursiv
D: Menge von Knotenmarkierungen
Z: Menge von Blattmarkierungen
(Induktive) Definition 3.1.2
(i) Wenn z ∈ Z, dann ist (z) ein (D, Z)-Binärbaum.
// Blatt mit Markierung z. Auch: z (ohne Klammern), z
(ii) Wenn T1, T2 (D, Z)-Binärbäume sind und x ∈ D ist,
dann ist auch (T1, x, T2) ein (D, Z)-Binärbaum.
// Wurzel mit Markierung x, linker Unterbaum T1, rechter Unterbaum T2.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
13
Mathematische Struktur: rekursiv
D: Menge von Knotenmarkierungen
Z: Menge von Blattmarkierungen
(Induktive) Definition 3.1.2
(i) Wenn z ∈ Z, dann ist (z) ein (D, Z)-Binärbaum.
// Blatt mit Markierung z. Auch: z (ohne Klammern), z
(ii) Wenn T1, T2 (D, Z)-Binärbäume sind und x ∈ D ist,
dann ist auch (T1, x, T2) ein (D, Z)-Binärbaum.
// Wurzel mit Markierung x, linker Unterbaum T1, rechter Unterbaum T2.
∗
(iii) Nichts sonst ist (D, Z)-Binärbaum.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
13
Mathematische Struktur: rekursiv
D: Menge von Knotenmarkierungen
Z: Menge von Blattmarkierungen
(Induktive) Definition 3.1.2
(i) Wenn z ∈ Z, dann ist (z) ein (D, Z)-Binärbaum.
// Blatt mit Markierung z. Auch: z (ohne Klammern), z
(ii) Wenn T1, T2 (D, Z)-Binärbäume sind und x ∈ D ist,
dann ist auch (T1, x, T2) ein (D, Z)-Binärbaum.
// Wurzel mit Markierung x, linker Unterbaum T1, rechter Unterbaum T2.
∗
(iii) Nichts sonst ist (D, Z)-Binärbaum.
∗
(iii) wird bei induktiven Definitionen meist weggelassen.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
13
Beispiel: D = {a, . . . , z} und Z = N. – Tupeldarstellung:
(((37, b, (17, a, 31)), c, 7), b, ((29, d, (1, r, 23)), z, (13, u, 3)))
Graphische Darstellung:
b
c
7
b
37
d
u
29
a
17
FG KTuEA, TU Ilmenau
z
31
13
r
1
3
23
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
14
Beispiel: D = {a, . . . , z} und Z = N. – Tupeldarstellung:
(((37, b, (17, a, 31)), c, 7), b, ((29, d, (1, r, 23)), z, (13, u, 3)))
Graphische Darstellung:
b
c
7
b
37
d
u
29
a
17
FG KTuEA, TU Ilmenau
z
31
13
r
1
3
23
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
14
Beispiel: D = {a, . . . , z} und Z = N. – Tupeldarstellung:
(((37, b, (17, a, 31)), c, 7), b, ((29, d, (1, r, 23)), z, (13, u, 3)))
Graphische Darstellung:
b
c
7
b
37
d
u
29
a
17
FG KTuEA, TU Ilmenau
z
31
13
r
1
3
23
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
14
Beispiel: Arithmetischer Ausdruck als Baum
D = {+, −, ·, /} und Z = {x1, x2, x3, . . .}.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
15
Beispiel: Arithmetischer Ausdruck als Baum
D = {+, −, ·, /} und Z = {x1, x2, x3, . . .}.
/
−
+
−
x2
x4
x9
/
x7
x5
x5
−
x3
x1
−
+
x6
x6
x3
x1
((((x2 · x4) + ((x3 − x7) − (x6/x1))) + (x5 · (x9 · x3)))/((x5 − x6) − x1))
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
15
Beispiel: Arithmetischer Ausdruck als Baum
D = {+, −, ·, /} und Z = {x1, x2, x3, . . .}.
/
−
+
−
x2
x4
x9
/
x7
x5
x5
−
x3
x1
−
+
x6
x6
x3
x1
((((x2 · x4) + ((x3 − x7) − (x6/x1))) + (x5 · (x9 · x3)))/((x5 − x6) − x1))
Der Ausdruck ist genau die Tupeldarstellung ohne Kommas!
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
15
Mathematische Struktur: rekursiv (Forts.)
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
16
Mathematische Struktur: rekursiv (Forts.)
(((37, b, (17, a, 31)), c, 7), b, ((29, d, (1, r, 23)), z, (13, u, 3)))
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
16
Mathematische Struktur: rekursiv (Forts.)
(((37, b, (17, a, 31)), c, 7), b, ((29, d, (1, r, 23)), z, (13, u, 3)))
Beachte: Man kann die rekursiv definierten Binärbäume auf
zwei letztendlich äquivalente Arten auffassen:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
16
Mathematische Struktur: rekursiv (Forts.)
(((37, b, (17, a, 31)), c, 7), b, ((29, d, (1, r, 23)), z, (13, u, 3)))
Beachte: Man kann die rekursiv definierten Binärbäume auf
zwei letztendlich äquivalente Arten auffassen:
(a) als geschachtelte Tripel
FG KTuEA, TU Ilmenau
oder
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
16
Mathematische Struktur: rekursiv (Forts.)
(((37, b, (17, a, 31)), c, 7), b, ((29, d, (1, r, 23)), z, (13, u, 3)))
Beachte: Man kann die rekursiv definierten Binärbäume auf
zwei letztendlich äquivalente Arten auffassen:
(a) als geschachtelte Tripel
oder
(b) als Zeichenreihen mit Symbolen aus D ∪ Z ∪ {(, ), “,”}.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
16
Mathematische Struktur: rekursiv (Forts.)
(((37, b, (17, a, 31)), c, 7), b, ((29, d, (1, r, 23)), z, (13, u, 3)))
Beachte: Man kann die rekursiv definierten Binärbäume auf
zwei letztendlich äquivalente Arten auffassen:
(a) als geschachtelte Tripel
oder
(b) als Zeichenreihen mit Symbolen aus D ∪ Z ∪ {(, ), “,”}.
Auffassung (a) ist mathematisch klarer, da aus gegebenem T = (T1, x, T2)
die Komponenten T1, x und T2 unmittelbar abgelesen werden können
(ohne Syntaxanalyse o. ä.).
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
16
Mathematische Struktur: rekursiv (Forts.)
(((37, b, (17, a, 31)), c, 7), b, ((29, d, (1, r, 23)), z, (13, u, 3)))
Beachte: Man kann die rekursiv definierten Binärbäume auf
zwei letztendlich äquivalente Arten auffassen:
(a) als geschachtelte Tripel
oder
(b) als Zeichenreihen mit Symbolen aus D ∪ Z ∪ {(, ), “,”}.
Auffassung (a) ist mathematisch klarer, da aus gegebenem T = (T1, x, T2)
die Komponenten T1, x und T2 unmittelbar abgelesen werden können
(ohne Syntaxanalyse o. ä.).
Vorteil der rekursiven Auffassung:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
16
Mathematische Struktur: rekursiv (Forts.)
(((37, b, (17, a, 31)), c, 7), b, ((29, d, (1, r, 23)), z, (13, u, 3)))
Beachte: Man kann die rekursiv definierten Binärbäume auf
zwei letztendlich äquivalente Arten auffassen:
(a) als geschachtelte Tripel
oder
(b) als Zeichenreihen mit Symbolen aus D ∪ Z ∪ {(, ), “,”}.
Auffassung (a) ist mathematisch klarer, da aus gegebenem T = (T1, x, T2)
die Komponenten T1, x und T2 unmittelbar abgelesen werden können
(ohne Syntaxanalyse o. ä.).
Vorteil der rekursiven Auffassung:
Übersichtlichere (rekursive) Programme und Korrektheitsüberlegungen.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
16
Mathematische Struktur: rekursiv (Forts.)
(((37, b, (17, a, 31)), c, 7), b, ((29, d, (1, r, 23)), z, (13, u, 3)))
Beachte: Man kann die rekursiv definierten Binärbäume auf
zwei letztendlich äquivalente Arten auffassen:
(a) als geschachtelte Tripel
oder
(b) als Zeichenreihen mit Symbolen aus D ∪ Z ∪ {(, ), “,”}.
Auffassung (a) ist mathematisch klarer, da aus gegebenem T = (T1, x, T2)
die Komponenten T1, x und T2 unmittelbar abgelesen werden können
(ohne Syntaxanalyse o. ä.).
Vorteil der rekursiven Auffassung:
Übersichtlichere (rekursive) Programme und Korrektheitsüberlegungen.
Vorteil der flachen“ Auffassung:
”
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
16
Mathematische Struktur: rekursiv (Forts.)
(((37, b, (17, a, 31)), c, 7), b, ((29, d, (1, r, 23)), z, (13, u, 3)))
Beachte: Man kann die rekursiv definierten Binärbäume auf
zwei letztendlich äquivalente Arten auffassen:
(a) als geschachtelte Tripel
oder
(b) als Zeichenreihen mit Symbolen aus D ∪ Z ∪ {(, ), “,”}.
Auffassung (a) ist mathematisch klarer, da aus gegebenem T = (T1, x, T2)
die Komponenten T1, x und T2 unmittelbar abgelesen werden können
(ohne Syntaxanalyse o. ä.).
Vorteil der rekursiven Auffassung:
Übersichtlichere (rekursive) Programme und Korrektheitsüberlegungen.
Vorteil der flachen“ Auffassung:
”
Eventuell effizientere Ausführung (Schleifen statt rekursive Prozeduraufrufe).
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
16
(((37, b, (17, a, 31)), c, 7), b, ((29, d, (1, r, 23)), z, (13, u, 3)))
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
17
(((37, b, (17, a, 31)), c, 7), b, ((29, d, (1, r, 23)), z, (13, u, 3)))
(Rekursiver) Umbau von rekursiver zu flacher“ Struktur:
”
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
17
(((37, b, (17, a, 31)), c, 7), b, ((29, d, (1, r, 23)), z, (13, u, 3)))
(Rekursiver) Umbau von rekursiver zu flacher“ Struktur:
”
Sei T ein (D, Z)-Binärbaum.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
17
(((37, b, (17, a, 31)), c, 7), b, ((29, d, (1, r, 23)), z, (13, u, 3)))
(Rekursiver) Umbau von rekursiver zu flacher“ Struktur:
”
Sei T ein (D, Z)-Binärbaum.
Wenn T = z = (z) für ein z ∈ Z, dann ist die flache“
”
Version von T ein äußerer Knoten mit Inschrift z.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
17
(((37, b, (17, a, 31)), c, 7), b, ((29, d, (1, r, 23)), z, (13, u, 3)))
(Rekursiver) Umbau von rekursiver zu flacher“ Struktur:
”
Sei T ein (D, Z)-Binärbaum.
Wenn T = z = (z) für ein z ∈ Z, dann ist die flache“
”
Version von T ein äußerer Knoten mit Inschrift z. Dieser ist
auch die Wurzel.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
17
(((37, b, (17, a, 31)), c, 7), b, ((29, d, (1, r, 23)), z, (13, u, 3)))
(Rekursiver) Umbau von rekursiver zu flacher“ Struktur:
”
Sei T ein (D, Z)-Binärbaum.
Wenn T = z = (z) für ein z ∈ Z, dann ist die flache“
”
Version von T ein äußerer Knoten mit Inschrift z. Dieser ist
auch die Wurzel.
Wenn T = (T1, x, T2), dann werden rekursiv flache“ Versio”
nen der beiden Unterbäume T1 und T2 hergestellt,
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
17
(((37, b, (17, a, 31)), c, 7), b, ((29, d, (1, r, 23)), z, (13, u, 3)))
(Rekursiver) Umbau von rekursiver zu flacher“ Struktur:
”
Sei T ein (D, Z)-Binärbaum.
Wenn T = z = (z) für ein z ∈ Z, dann ist die flache“
”
Version von T ein äußerer Knoten mit Inschrift z. Dieser ist
auch die Wurzel.
Wenn T = (T1, x, T2), dann werden rekursiv flache“ Versio”
nen der beiden Unterbäume T1 und T2 hergestellt, mit Wurzeln
r1 und r2 und disjunkten Knotenmengen V1, V2, L1, L2.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
17
(((37, b, (17, a, 31)), c, 7), b, ((29, d, (1, r, 23)), z, (13, u, 3)))
(Rekursiver) Umbau von rekursiver zu flacher“ Struktur:
”
Sei T ein (D, Z)-Binärbaum.
Wenn T = z = (z) für ein z ∈ Z, dann ist die flache“
”
Version von T ein äußerer Knoten mit Inschrift z. Dieser ist
auch die Wurzel.
Wenn T = (T1, x, T2), dann werden rekursiv flache“ Versio”
nen der beiden Unterbäume T1 und T2 hergestellt, mit Wurzeln
r1 und r2 und disjunkten Knotenmengen V1, V2, L1, L2.
V := V1 ∪ V2; L := L1 ∪ L2; child := child1 ∪ child2.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
17
(((37, b, (17, a, 31)), c, 7), b, ((29, d, (1, r, 23)), z, (13, u, 3)))
(Rekursiver) Umbau von rekursiver zu flacher“ Struktur:
”
Sei T ein (D, Z)-Binärbaum.
Wenn T = z = (z) für ein z ∈ Z, dann ist die flache“
”
Version von T ein äußerer Knoten mit Inschrift z. Dieser ist
auch die Wurzel.
Wenn T = (T1, x, T2), dann werden rekursiv flache“ Versio”
nen der beiden Unterbäume T1 und T2 hergestellt, mit Wurzeln
r1 und r2 und disjunkten Knotenmengen V1, V2, L1, L2.
V := V1 ∪ V2; L := L1 ∪ L2; child := child1 ∪ child2.
Schließlich wird ein neuer innerer Knoten r mit Inschrift x
erzeugt und zusätzlich child(r, left) = r1 und
child(r, right) = r2 gesetzt.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
17
Baum, rekursiv, als Text → flache“ Struktur
”
Umbau von rekursiver Struktur (Text) zu flacher“ Struktur:
”
Prozedur TreeText2Flat()
Verfahren: Liest (D, Z)-Binärbaum (als Textstrom) von links nach rechts,
baut T ( flach“) mit Wurzel v.
”
lies (“;
// lies“ heißt: Zeichen wird verbraucht
”
”
wenn nächstes Zeichen z ∈ Z ist: lies z; T ← z ; dies ist Wurzel von T ;
sonst:
baue leere Wurzel v für T ;
T1 ← TreeText2Flat(); child(v, left) ← Wurzel v1 von T1;
lies ,“;
”
lies Element x ∈ D; data(v) ← x;
lies ,“;
”
T2 ← TreeText2Flat(); child(v, right) ← Wurzel v2 von T2;
lies )“.
”
return T , mit Wurzel v.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
18
Umbau von flacher“ zu rekursiver Struktur:
”
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
19
Umbau von flacher“ zu rekursiver Struktur:
”
Gegeben: Baum T mit Knotenbeschriftungen
als V , L, child, mV : V → D und mL : L → Z.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
19
Umbau von flacher“ zu rekursiver Struktur:
”
Gegeben: Baum T mit Knotenbeschriftungen
als V , L, child, mV : V → D und mL : L → Z.
Baue rekursiv für jeden Knoten v ∈ V ∪ L einen Baum Tv .
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
19
Umbau von flacher“ zu rekursiver Struktur:
”
Gegeben: Baum T mit Knotenbeschriftungen
als V , L, child, mV : V → D und mL : L → Z.
Baue rekursiv für jeden Knoten v ∈ V ∪ L einen Baum Tv .
Prozedur Flat2Tree(v) arbeitet folgendermaßen
(die Beschreibung von T ist global gegeben):
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
19
Umbau von flacher“ zu rekursiver Struktur:
”
Gegeben: Baum T mit Knotenbeschriftungen
als V , L, child, mV : V → D und mL : L → Z.
Baue rekursiv für jeden Knoten v ∈ V ∪ L einen Baum Tv .
Prozedur Flat2Tree(v) arbeitet folgendermaßen
(die Beschreibung von T ist global gegeben):
Falls v ein Blatt mit mL(v) = z ist: return Tv = (z).
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
19
Umbau von flacher“ zu rekursiver Struktur:
”
Gegeben: Baum T mit Knotenbeschriftungen
als V , L, child, mV : V → D und mL : L → Z.
Baue rekursiv für jeden Knoten v ∈ V ∪ L einen Baum Tv .
Prozedur Flat2Tree(v) arbeitet folgendermaßen
(die Beschreibung von T ist global gegeben):
Falls v ein Blatt mit mL(v) = z ist: return Tv = (z).
Falls v ein innerer Knoten mit mV (v) = x ist:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
19
Umbau von flacher“ zu rekursiver Struktur:
”
Gegeben: Baum T mit Knotenbeschriftungen
als V , L, child, mV : V → D und mL : L → Z.
Baue rekursiv für jeden Knoten v ∈ V ∪ L einen Baum Tv .
Prozedur Flat2Tree(v) arbeitet folgendermaßen
(die Beschreibung von T ist global gegeben):
Falls v ein Blatt mit mL(v) = z ist: return Tv = (z).
Falls v ein innerer Knoten mit mV (v) = x ist:
T1 ← Flat2Tree(child(v, left));
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
19
Umbau von flacher“ zu rekursiver Struktur:
”
Gegeben: Baum T mit Knotenbeschriftungen
als V , L, child, mV : V → D und mL : L → Z.
Baue rekursiv für jeden Knoten v ∈ V ∪ L einen Baum Tv .
Prozedur Flat2Tree(v) arbeitet folgendermaßen
(die Beschreibung von T ist global gegeben):
Falls v ein Blatt mit mL(v) = z ist: return Tv = (z).
Falls v ein innerer Knoten mit mV (v) = x ist:
T1 ← Flat2Tree(child(v, left));
T2 ← Flat2Tree(child(v, right));
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
19
Umbau von flacher“ zu rekursiver Struktur:
”
Gegeben: Baum T mit Knotenbeschriftungen
als V , L, child, mV : V → D und mL : L → Z.
Baue rekursiv für jeden Knoten v ∈ V ∪ L einen Baum Tv .
Prozedur Flat2Tree(v) arbeitet folgendermaßen
(die Beschreibung von T ist global gegeben):
Falls v ein Blatt mit mL(v) = z ist: return Tv = (z).
Falls v ein innerer Knoten mit mV (v) = x ist:
T1 ← Flat2Tree(child(v, left));
T2 ← Flat2Tree(child(v, right));
return Tv = (T1, x, T2).
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
19
Umbau von flacher“ zu rekursiver Struktur:
”
Gegeben: Baum T mit Knotenbeschriftungen
als V , L, child, mV : V → D und mL : L → Z.
Baue rekursiv für jeden Knoten v ∈ V ∪ L einen Baum Tv .
Prozedur Flat2Tree(v) arbeitet folgendermaßen
(die Beschreibung von T ist global gegeben):
Falls v ein Blatt mit mL(v) = z ist: return Tv = (z).
Falls v ein innerer Knoten mit mV (v) = x ist:
T1 ← Flat2Tree(child(v, left));
T2 ← Flat2Tree(child(v, right));
return Tv = (T1, x, T2).
Um T zu transformieren: Flat2Tree(r) für Wurzel r von T .
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
19
Spezifikation des Datentyps Binärbaum“
”
Datentyp Binärbaum über D: (leere äußere Knoten)
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
20
Spezifikation des Datentyps Binärbaum“
”
Datentyp Binärbaum über D: (leere äußere Knoten)
1. Signatur:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
20
Spezifikation des Datentyps Binärbaum“
”
Datentyp Binärbaum über D: (leere äußere Knoten)
1. Signatur:
Sorten:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
20
Spezifikation des Datentyps Binärbaum“
”
Datentyp Binärbaum über D: (leere äußere Knoten)
1. Signatur:
Sorten:
FG KTuEA, TU Ilmenau
Elements
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
20
Spezifikation des Datentyps Binärbaum“
”
Datentyp Binärbaum über D: (leere äußere Knoten)
1. Signatur:
Sorten:
FG KTuEA, TU Ilmenau
Elements
Bintrees
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
20
Spezifikation des Datentyps Binärbaum“
”
Datentyp Binärbaum über D: (leere äußere Knoten)
1. Signatur:
Sorten:
FG KTuEA, TU Ilmenau
Elements
Bintrees
Boolean
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
20
Spezifikation des Datentyps Binärbaum“
”
Datentyp Binärbaum über D: (leere äußere Knoten)
1. Signatur:
Sorten:
Elements
Bintrees
Boolean
Operationen:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
20
Spezifikation des Datentyps Binärbaum“
”
Datentyp Binärbaum über D: (leere äußere Knoten)
1. Signatur:
Sorten:
Elements
Bintrees
Boolean
Operationen:
empty : → Bintrees
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
20
Spezifikation des Datentyps Binärbaum“
”
Datentyp Binärbaum über D: (leere äußere Knoten)
1. Signatur:
Sorten:
Elements
Bintrees
Boolean
Operationen:
empty : → Bintrees
buildTree: Elements × Bintrees × Bintrees → Bintrees
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
20
Spezifikation des Datentyps Binärbaum“
”
Datentyp Binärbaum über D: (leere äußere Knoten)
1. Signatur:
Sorten:
Elements
Bintrees
Boolean
Operationen:
empty : → Bintrees
buildTree: Elements × Bintrees × Bintrees → Bintrees
leftSubtree: Bintrees → Bintrees
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
20
Spezifikation des Datentyps Binärbaum“
”
Datentyp Binärbaum über D: (leere äußere Knoten)
1. Signatur:
Sorten:
Elements
Bintrees
Boolean
Operationen:
empty : → Bintrees
buildTree: Elements × Bintrees × Bintrees → Bintrees
leftSubtree: Bintrees → Bintrees
rightSubtree: Bintrees → Bintrees
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
20
Spezifikation des Datentyps Binärbaum“
”
Datentyp Binärbaum über D: (leere äußere Knoten)
1. Signatur:
Sorten:
Elements
Bintrees
Boolean
Operationen:
empty : → Bintrees
buildTree: Elements × Bintrees × Bintrees → Bintrees
leftSubtree: Bintrees → Bintrees
rightSubtree: Bintrees → Bintrees
data: Bintrees → Elements
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
20
Spezifikation des Datentyps Binärbaum“
”
Datentyp Binärbaum über D: (leere äußere Knoten)
1. Signatur:
Sorten:
Elements
Bintrees
Boolean
Operationen:
empty : → Bintrees
buildTree: Elements × Bintrees × Bintrees → Bintrees
leftSubtree: Bintrees → Bintrees
rightSubtree: Bintrees → Bintrees
data: Bintrees → Elements
isempty : Bintrees → Boolean
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
20
Spezifikation des Datentyps Binärbaum“
”
Datentyp Binärbaum über D: (leere äußere Knoten)
1. Signatur:
Sorten:
Elements
Bintrees
Boolean
Operationen:
empty : → Bintrees
buildTree: Elements × Bintrees × Bintrees → Bintrees
leftSubtree: Bintrees → Bintrees
rightSubtree: Bintrees → Bintrees
data: Bintrees → Elements
isempty : Bintrees → Boolean
2. Mathematisches Modell:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
20
Sorten:
Elements:
FG KTuEA, TU Ilmenau
(nichtleere) Menge D
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
21
Sorten:
Elements:
Bintrees:
FG KTuEA, TU Ilmenau
(nichtleere) Menge D
{T | T ist (D, {−})-Binärbaum}
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
21
Sorten:
Elements:
Bintrees:
Boolean:
FG KTuEA, TU Ilmenau
(nichtleere) Menge D
{T | T ist (D, {−})-Binärbaum}
{true, false}
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
21
Sorten:
Elements:
Bintrees:
Boolean:
Op’en:
empty = (−) =: FG KTuEA, TU Ilmenau
(nichtleere) Menge D
{T | T ist (D, {−})-Binärbaum}
{true, false}
// leerer Baum“
”
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
21
Sorten:
Elements:
Bintrees:
Boolean:
(nichtleere) Menge D
{T | T ist (D, {−})-Binärbaum}
{true, false}
Op’en:
empty = (−) =: // leerer Baum“
”
buildTree(x, T1, T2) := (T1, x, T2)
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
21
Sorten:
Elements:
Bintrees:
Boolean:
(nichtleere) Menge D
{T | T ist (D, {−})-Binärbaum}
{true, false}
Op’en:
empty = (−) =: // leerer Baum“
”
buildTree(x, T1, T2) := (T1, x, T2)
leftSubtree(T ) :=
FG KTuEA, TU Ilmenau
T1,
falls T = (T1, x, T2)
undefiniert, falls T = Algorithmen und Datenstrukturen – SS16 – Kapitel 3
21
Sorten:
Elements:
Bintrees:
Boolean:
(nichtleere) Menge D
{T | T ist (D, {−})-Binärbaum}
{true, false}
Op’en:
empty = (−) =: // leerer Baum“
”
buildTree(x, T1, T2) := (T1, x, T2)
T1,
leftSubtree(T ) :=
undefiniert,
T2,
rightSubtree(T ) :=
undefiniert,
FG KTuEA, TU Ilmenau
falls T = (T1, x, T2)
falls T = falls T = (T1, x, T2)
falls T = Algorithmen und Datenstrukturen – SS16 – Kapitel 3
21
Sorten:
Elements:
Bintrees:
Boolean:
(nichtleere) Menge D
{T | T ist (D, {−})-Binärbaum}
{true, false}
Op’en:
empty = (−) =: // leerer Baum“
”
buildTree(x, T1, T2) := (T1, x, T2)
T1,
falls T = (T1, x, T2)
leftSubtree(T ) :=
undefiniert, falls T = T2,
falls T = (T1, x, T2)
rightSubtree(T ) :=
undefiniert, falls T = x,
falls T = (T1, x, T2)
data(T ) :=
undefiniert, falls T = FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
21
Sorten:
Elements:
Bintrees:
Boolean:
(nichtleere) Menge D
{T | T ist (D, {−})-Binärbaum}
{true, false}
Op’en:
empty = (−) =: // leerer Baum“
”
buildTree(x, T1, T2) := (T1, x, T2)
T1,
falls T = (T1, x, T2)
leftSubtree(T ) :=
undefiniert, falls T = T2,
falls T = (T1, x, T2)
rightSubtree(T ) :=
undefiniert, falls T = x,
falls T = (T1, x, T2)
data(T ) :=
undefiniert, falls T = false, falls T = (T1, x, T2)
isempty (T ) :=
true, falls T = FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
21
Binärbäume, Implementierung I:
Zeigerstruktur bzw. Referenzstruktur, vgl. AuP-Vorlesung.
Mit markierten externen Knoten.
T:
b
z
c
b
a
37
17
FG KTuEA, TU Ilmenau
d
7
u
r
29
31
1
13
3
23
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
22
Binärbäume, Implementierung II: Leere externe Knoten
T:
b
z
c
d
b
a
u
r
Externe Knoten werden nicht repräsentiert
(null-Zeiger/Referenz).
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
23
Binärbäume, Implementierung II: Leere externe Knoten
T:
b
z
c
d
b
a
u
r
Externe Knoten werden nicht repräsentiert
(null-Zeiger/Referenz).
Oder: 1 externer Knoten `, Referenz auf ` statt null.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
23
Binärbäume, Implementierung II: Leere externe Knoten
T:
b
z
c
d
b
a
u
r
Externe Knoten werden nicht repräsentiert
(null-Zeiger/Referenz).
Oder: 1 externer Knoten `, Referenz auf ` statt null.
Speicherplatzbedarf für n Knoten:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
23
Binärbäume, Implementierung II: Leere externe Knoten
T:
b
z
c
d
b
a
u
r
Externe Knoten werden nicht repräsentiert
(null-Zeiger/Referenz).
Oder: 1 externer Knoten `, Referenz auf ` statt null.
Speicherplatzbedarf für n Knoten:
n Dateneinträge, 2n Zeiger/Referenzen, davon n+1 mal null.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
23
Mögliche Erweiterung: Vaterzeiger.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
24
Mögliche Erweiterung: Vaterzeiger.
T:
Wurzel
b
z
c
d
b
a
FG KTuEA, TU Ilmenau
u
r
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
24
Mögliche Erweiterung: Vaterzeiger.
T:
Wurzel
b
z
c
d
b
a
u
r
Erleichtert Navigieren im Baum,
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
24
Mögliche Erweiterung: Vaterzeiger.
T:
Wurzel
b
z
c
d
b
a
u
r
Erleichtert Navigieren im Baum, besonders bei Verwenden der
flachen“ Auffassung und von iterativen Verfahren.
”
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
24
Implementierung der Operationen des mathematischen
Modells:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
25
Implementierung der Operationen des mathematischen
Modells:
Baum wird immer als Zeiger bzw. Referenz auf den Wurzelknoten dargestellt.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
25
Implementierung der Operationen des mathematischen
Modells:
Baum wird immer als Zeiger bzw. Referenz auf den Wurzelknoten dargestellt.
empty, isempty, data: klar.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
25
Implementierung der Operationen des mathematischen
Modells:
Baum wird immer als Zeiger bzw. Referenz auf den Wurzelknoten dargestellt.
empty, isempty, data: klar.
leftSubtree, rightSubtree: Zeiger/Referenz zurückgeben.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
25
Implementierung der Operationen des mathematischen
Modells:
Baum wird immer als Zeiger bzw. Referenz auf den Wurzelknoten dargestellt.
empty, isempty, data: klar.
leftSubtree, rightSubtree: Zeiger/Referenz zurückgeben.
buildTree(x, T1, T2) erzeugt einen neuen Knoten (Wurzel) r
mit Eintrag x, die Wurzeln von T1 bzw. T2 werden linkes bzw.
rechtes Kind von r.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
25
Implementierung der Operationen des mathematischen
Modells:
Baum wird immer als Zeiger bzw. Referenz auf den Wurzelknoten dargestellt.
empty, isempty, data: klar.
leftSubtree, rightSubtree: Zeiger/Referenz zurückgeben.
buildTree(x, T1, T2) erzeugt einen neuen Knoten (Wurzel) r
mit Eintrag x, die Wurzeln von T1 bzw. T2 werden linkes bzw.
rechtes Kind von r.
Der Benutzer der buildTree-Operation muss sicherstellen,
dass die Knotenmengen von T1 und T2 disjunkt sind!
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
25
3.2 Binärbäume: Terminologie
• Binärbaum, engl: binary tree“
”
• (innerer) Knoten v, engl: node“
”
• Knoteneintrag: x = data(v) = data(T 0) (T 0 = Tv )
x v
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
26
• Tv : Unterbaum mit Wurzel v
x v
Tv
Der Teil von T , der aus den Knoten besteht, deren Weg zur
Wurzel durch v verläuft. Die Wurzel ist v. Dabei kann v ein
beliebiger innerer oder äußerer Knoten sein.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
27
• (äußerer) Knoten ≡ Blatt l, engl: leaf “, Plural leaves“
”
”
• Blatteintrag: z = data(l)
z l
• Wurzel, engl: root“
”
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
28
• Vater ≡ (unmittelbarer) Vorgänger,
engl: parent“, von v: p(v)
”
• linkes Kind ≡ (unmittelbarer) Nachfolger, Sohn,
engl: left child“, von v: child(v, left)
”
• rechtes Kind ≡ (unmittelbarer) Nachfolger, Sohn,
engl: right child“, von v: child(v, right)
”
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
29
• Vorfahr (Vater von Vater von Vater . . . von v),
engl: ancestor“ (Im Bild: v ist Vorfahr von u.)
”
• Nachfahr (Kind von Kind von . . . von v),
engl: descendant“ (Im Bild: u ist Nachfahr von v.)
”
v
u
Achtung: Oft gilt v als (uneigentlicher) Vorfahr/Nachfahr von v.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
30
• Weg in T : Knotenfolge oder Kantenfolge, die von v zu
einem Nachfahren u führt
• Länge eines Wegs (v0, v1, . . . , vs):
Anzahl s der Kanten auf dem Weg
v
Weg der Länge 3
von v nach u
u
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
31
Häufiger Spezialfall:
Die externen Knoten haben keinen Eintrag.
(Bzw. jeder hat denselben nichtssagenden Eintrag, z.B. −“ .)
”
Ein solcher externer Knoten wird auch als leerer Baum“
”
bezeichnet.
"Blätter"
Oft bezeichnet man dann die inneren Knoten, die keinen
inneren Knoten als Nachfolger haben, als Blätter“.
”
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
32
Tiefe/Level eines Knotens
Die Länge (das ist die Kantenzahl) des Wegs
(v0, v1, . . . , vd) von der Wurzel r = v0 zum Knoten v = vd
heißt die Tiefe oder das Level d(v) von Knoten v.
Auch externen Knoten wird so eine Tiefe zugeordnet.
0
1
2
d ( v )=3
v
3
4
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
33
Tiefe/Höhe eines Binärbaums
Die Tiefe oder Höhe d(T ) (auch: h(T )) eines Binärbaums T
ist definiert wie folgt:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
34
Tiefe/Höhe eines Binärbaums
Die Tiefe oder Höhe d(T ) (auch: h(T )) eines Binärbaums T
ist definiert wie folgt:
1. Fall: Die externen Knoten sind leer ():
d(T ) = max({−1} ∪ {d(v) | v innerer Knoten in T }).
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
34
Tiefe/Höhe eines Binärbaums
Die Tiefe oder Höhe d(T ) (auch: h(T )) eines Binärbaums T
ist definiert wie folgt:
1. Fall: Die externen Knoten sind leer ():
d(T ) = max({−1} ∪ {d(v) | v innerer Knoten in T }).
Beobachte induktive Formel:
d(T ) = −1 für T = und
d((T1, x, T2)) = 1 + max{d(T1), d(T2)}.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
34
Beispiele: Tiefen/Höhen von Binärbäumen mit leeren externen
Knoten.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
35
Beispiele: Tiefen/Höhen von Binärbäumen mit leeren externen
Knoten.
Höhe −1
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
Höhe 0
35
Beispiele: Tiefen/Höhen von Binärbäumen mit leeren externen
Knoten.
Höhe −1
Höhe 0
Höhe 3:
x5
x2
T1
x6
x1
x4
T2
x7
x3
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
35
Tiefe/Höhe eines Binärbaums
Definition der Tiefe/Höhe von T :
2. Fall: Die externen Knoten sind nicht leer ((z), z ∈ Z):
d(T ) := max{d(v) | v äußerer Knoten in T }.
0
0
0
C
1
1
0
H
1
1
F
0
G
0
E
0
1
0
B
1
1
I
0
A
1
D
1
K
Tiefe 4, gleich der maximalen Länge eines Weges zu einem Blatt.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
36
Definition der Höhe eines Knotens:
Die Höhe h(v) eines Knotens in T ist definiert als die Tiefe
d(Tv ) des Teilbaums mit Wurzel v. – Beispiel:
Höhe: 5
Höhe: 4
Höhe: 2
Höhe: 1
Höhe: 0
Hier angegeben: Fall Blätter nicht leer“.
”
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
37
3.3 Binärbäume: Eigenschaften
Proposition 3.3.1
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
38
3.3 Binärbäume: Eigenschaften
Proposition 3.3.1
Es sei T ein Binärbaum mit n ≥ 0 inneren Knoten
und leeren äußeren Knoten. Dann gilt:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
38
3.3 Binärbäume: Eigenschaften
Proposition 3.3.1
Es sei T ein Binärbaum mit n ≥ 0 inneren Knoten
und leeren äußeren Knoten. Dann gilt:
(a)
T hat 2n Zeiger/Kanten. (Beispiel: n = 10, 2n = 20)
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
38
3.3 Binärbäume: Eigenschaften
Proposition 3.3.1
Es sei T ein Binärbaum mit n ≥ 0 inneren Knoten
und leeren äußeren Knoten. Dann gilt:
(a)
(b)
T hat 2n Zeiger/Kanten. (Beispiel: n = 10, 2n = 20)
T hat n + 1 äußere Knoten. (Beispiel: n + 1 = 11)
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
38
(c) Auf Level l liegen höchstens 2l Knoten, l = 0, 1, 2, . . ..
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
39
(c) Auf Level l liegen höchstens 2l Knoten, l = 0, 1, 2, . . ..
(d) Auf Level 0, 1, . . . , l zusammen liegen höchstens
1 + 2 + 4 + · · · + 2l
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
39
(c) Auf Level l liegen höchstens 2l Knoten, l = 0, 1, 2, . . ..
(d) Auf Level 0, 1, . . . , l zusammen liegen höchstens
1 + 2 + 4 + · · · + 2l = 2l+1 − 1
innere Knoten.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
39
(c) Auf Level l liegen höchstens 2l Knoten, l = 0, 1, 2, . . ..
(d) Auf Level 0, 1, . . . , l zusammen liegen höchstens
1 + 2 + 4 + · · · + 2l = 2l+1 − 1
innere Knoten. Daraus: log(n + 1) ≤ l + 1, für das Level l
mit dem tiefsten inneren Knoten.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
39
(c) Auf Level l liegen höchstens 2l Knoten, l = 0, 1, 2, . . ..
(d) Auf Level 0, 1, . . . , l zusammen liegen höchstens
1 + 2 + 4 + · · · + 2l = 2l+1 − 1
innere Knoten. Daraus: log(n + 1) ≤ l + 1, für das Level l
mit dem tiefsten inneren Knoten.
(e) n − 1 ≥ d(T ) ≥ dlog(n + 1)e − 1.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
39
(c) Auf Level l liegen höchstens 2l Knoten, l = 0, 1, 2, . . ..
(d) Auf Level 0, 1, . . . , l zusammen liegen höchstens
1 + 2 + 4 + · · · + 2l = 2l+1 − 1
innere Knoten. Daraus: log(n + 1) ≤ l + 1, für das Level l
mit dem tiefsten inneren Knoten.
(e) n − 1 ≥ d(T ) ≥ dlog(n + 1)e − 1.
Merke: Die Tiefe eines Binärbaums mit n inneren Knoten ist
mindestens log n − 1.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
39
Proposition 3.3.2
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
40
Proposition 3.3.2
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
40
Proposition 3.3.2
Es sei T ein Binärbaum mit N ≥ 1 nichtleeren äußeren
Knoten. Dann gilt:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
40
Proposition 3.3.2
Es sei T ein Binärbaum mit N ≥ 1 nichtleeren äußeren
Knoten. Dann gilt:
(a) T hat n = N − 1 innere Knoten. (Bsp.: N = 11, n = 10)
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
40
Proposition 3.3.2
Es sei T ein Binärbaum mit N ≥ 1 nichtleeren äußeren
Knoten. Dann gilt:
(a) T hat n = N − 1 innere Knoten. (Bsp.: N = 11, n = 10)
(b) T hat 2N − 2 Zeiger/Kanten.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
40
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
41
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
41
(c) N ≤ 2d(T ).
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
41
(c) N ≤ 2d(T ).
(Beweis: Induktion über Binärbaume, rekursive Struktur.)
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
41
(c) N ≤ 2d(T ).
(Beweis: Induktion über Binärbaume, rekursive Struktur.)
(d) N − 1 ≥ d(T ) ≥ dlog N e.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
41
(c) N ≤ 2d(T ).
(Beweis: Induktion über Binärbaume, rekursive Struktur.)
(d) N − 1 ≥ d(T ) ≥ dlog N e.
Merke: Die Tiefe eines Binärbaums mit N nichtleeren
äußeren Knoten ist mindestens log N .
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
41
Totale innere Weglänge
Wieviele Kanten durchlaufe ich insgesamt, wenn ich zu jedem
inneren Knoten einmal hinlaufe?
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
42
Totale innere Weglänge
Wieviele Kanten durchlaufe ich insgesamt, wenn ich zu jedem
inneren Knoten einmal hinlaufe?
0
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
42
Totale innere Weglänge
Wieviele Kanten durchlaufe ich insgesamt, wenn ich zu jedem
inneren Knoten einmal hinlaufe?
0+2·1
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
42
Totale innere Weglänge
Wieviele Kanten durchlaufe ich insgesamt, wenn ich zu jedem
inneren Knoten einmal hinlaufe?
0+2·1+3·2+
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
42
Totale innere Weglänge
Wieviele Kanten durchlaufe ich insgesamt, wenn ich zu jedem
inneren Knoten einmal hinlaufe?
0+2·1+3·2+3·3+
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
42
Totale innere Weglänge
Wieviele Kanten durchlaufe ich insgesamt, wenn ich zu jedem
inneren Knoten einmal hinlaufe?
0+2·1+3·2+3·3+1·4
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
42
Totale innere Weglänge
Wieviele Kanten durchlaufe ich insgesamt, wenn ich zu jedem
inneren Knoten einmal hinlaufe?
0 + 2 · 1 + 3 · 2 + 3 · 3 + 1 · 4 = 21
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
42
Totale innere Weglänge
Wieviele Kanten durchlaufe ich insgesamt, wenn ich zu jedem
inneren Knoten einmal hinlaufe?
0 + 2 · 1 + 3 · 2 + 3 · 3 + 1 · 4 = 21
Totale innere Weglänge ( total internal path length“):
”
P
TIPL(T ) := v∈V d(v).
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
42
Totale innere Weglänge
Wieviele Kanten durchlaufe ich insgesamt, wenn ich zu jedem
inneren Knoten einmal hinlaufe?
0 + 2 · 1 + 3 · 2 + 3 · 3 + 1 · 4 = 21
Totale innere Weglänge ( total internal path length“):
”
P
TIPL(T ) := v∈V d(v). (Im Beispiel: 21.)
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
42
Totale innere Weglänge
Wieviele Kanten durchlaufe ich insgesamt, wenn ich zu jedem
inneren Knoten einmal hinlaufe?
0 + 2 · 1 + 3 · 2 + 3 · 3 + 1 · 4 = 21
Totale innere Weglänge ( total internal path length“):
”
P
TIPL(T ) := v∈V d(v). (Im Beispiel: 21.)
Mittlere innere Weglänge:
FG KTuEA, TU Ilmenau
1
n
· TIPL(T ).
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
42
Totale innere Weglänge
Wieviele Kanten durchlaufe ich insgesamt, wenn ich zu jedem
inneren Knoten einmal hinlaufe?
0 + 2 · 1 + 3 · 2 + 3 · 3 + 1 · 4 = 21
Totale innere Weglänge ( total internal path length“):
”
P
TIPL(T ) := v∈V d(v). (Im Beispiel: 21.)
Mittlere innere Weglänge:
FG KTuEA, TU Ilmenau
1
n
· TIPL(T ). (Im Beispiel
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
21
10 .)
42
Totale äußere Weglänge
Wieviele Kanten durchlaufe ich insgesamt, wenn ich zu jedem
äußeren Knoten einmal hinlaufe?
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
43
Totale äußere Weglänge
Wieviele Kanten durchlaufe ich insgesamt, wenn ich zu jedem
äußeren Knoten einmal hinlaufe?
2
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
43
Totale äußere Weglänge
Wieviele Kanten durchlaufe ich insgesamt, wenn ich zu jedem
äußeren Knoten einmal hinlaufe?
2+3·3
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
43
Totale äußere Weglänge
Wieviele Kanten durchlaufe ich insgesamt, wenn ich zu jedem
äußeren Knoten einmal hinlaufe?
2+3·3+5·4
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
43
Totale äußere Weglänge
Wieviele Kanten durchlaufe ich insgesamt, wenn ich zu jedem
äußeren Knoten einmal hinlaufe?
2 + 3 · 3 + 5 · 4 + 2 · 5 = 41.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
43
Totale äußere Weglänge
Wieviele Kanten durchlaufe ich insgesamt, wenn ich zu jedem
äußeren Knoten einmal hinlaufe?
2 + 3 · 3 + 5 · 4 + 2 · 5 = 41.
Totale äußere Weglänge ( total external path length“):
”
P
TEPL(T ) := l∈L d(l).
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
43
Totale äußere Weglänge
Wieviele Kanten durchlaufe ich insgesamt, wenn ich zu jedem
äußeren Knoten einmal hinlaufe?
2 + 3 · 3 + 5 · 4 + 2 · 5 = 41.
Totale äußere Weglänge ( total external path length“):
”
P
TEPL(T ) := l∈L d(l). (Im Beispiel: 41.)
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
43
Totale äußere Weglänge
Wieviele Kanten durchlaufe ich insgesamt, wenn ich zu jedem
äußeren Knoten einmal hinlaufe?
2 + 3 · 3 + 5 · 4 + 2 · 5 = 41.
Totale äußere Weglänge ( total external path length“):
”
P
TEPL(T ) := l∈L d(l). (Im Beispiel: 41.)
Mittlere äußere Weglänge: TEPL(T )/(n + 1).
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
43
Totale äußere Weglänge
Wieviele Kanten durchlaufe ich insgesamt, wenn ich zu jedem
äußeren Knoten einmal hinlaufe?
2 + 3 · 3 + 5 · 4 + 2 · 5 = 41.
Totale äußere Weglänge ( total external path length“):
”
P
TEPL(T ) := l∈L d(l). (Im Beispiel: 41.)
Mittlere äußere Weglänge: TEPL(T )/(n + 1). (Im Beispiel
41
11 .)
FG KTuEA, TU Ilmenau
43
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
Proposition 3.3.3
Für jeden Binärbaum mit n inneren Knoten gilt:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
44
Proposition 3.3.3
Für jeden Binärbaum mit n inneren Knoten gilt:
TEPL(T ) = TIPL(T ) + 2n.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
44
Proposition 3.3.3
Für jeden Binärbaum mit n inneren Knoten gilt:
TEPL(T ) = TIPL(T ) + 2n.
Beweis: Tafel.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
44
Nächstes Ziel: Auch die mittlere Weglänge in Binärbäumen
wächst mindestens logarithmisch mit der Knotenanzahl.
1
4
1
+ 3 · 18 + 6 · 16
=1
Lemma 3.3.4
Es sei L die Menge der äußeren Knoten in einem Binärbaum T .
X
Dann gilt:
2−d(l) = 1.
l∈L
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
45
Nächstes Ziel: Auch die mittlere Weglänge in Binärbäumen
wächst mindestens logarithmisch mit der Knotenanzahl.
.
1
4
1
+ 3 · 18 + 6 · 16
=1
Lemma 3.3.4
Es sei L die Menge der äußeren Knoten in einem Binärbaum T .
X
Dann gilt:
2−d(l) = 1.
l∈L
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
45
Nächstes Ziel: Auch die mittlere Weglänge in Binärbäumen
wächst mindestens logarithmisch mit der Knotenanzahl.
.
1/4
1/8
1/8
1/8
1/16
1/16
FG KTuEA, TU Ilmenau
1/16
1/16
1/16
1/16
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
45
Nächstes Ziel: Auch die mittlere Weglänge in Binärbäumen
wächst mindestens logarithmisch mit der Knotenanzahl.
.
1
4
1/4
1/8
1/8
1/8
1/16
1/16
FG KTuEA, TU Ilmenau
1
+ 3 · 18 + 6 · 16
=1
1/16
1/16
1/16
1/16
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
45
Nächstes Ziel: Auch die mittlere Weglänge in Binärbäumen
wächst mindestens logarithmisch mit der Knotenanzahl.
.
1
4
1/4
1/8
1/8
1/8
1/16
1/16
1
+ 3 · 18 + 6 · 16
=1
1/16
1/16
1/16
1/16
Lemma 3.3.4
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
45
Nächstes Ziel: Auch die mittlere Weglänge in Binärbäumen
wächst mindestens logarithmisch mit der Knotenanzahl.
.
1
4
1/4
1/8
1/8
1/8
1/16
1/16
1
+ 3 · 18 + 6 · 16
=1
1/16
1/16
1/16
1/16
Lemma 3.3.4
Es sei L die Menge der äußeren Knoten in einem Binärbaum T .
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
45
Nächstes Ziel: Auch die mittlere Weglänge in Binärbäumen
wächst mindestens logarithmisch mit der Knotenanzahl.
.
1
4
1/4
1/8
1/8
1/8
1/16
1/16
1
+ 3 · 18 + 6 · 16
=1
1/16
1/16
1/16
1/16
Lemma 3.3.4
Es sei L die Menge der äußeren Knoten in einem Binärbaum T .
X
Dann gilt:
2−d(l) = 1.
l∈L
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
45
Beweis: Wie in einem Kodierungsbaum markiere in jedem
inneren Knoten die Kante zum linken Kind mit 0, die zum
rechten Kind mit 1.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
46
Beweis: Wie in einem Kodierungsbaum markiere in jedem
inneren Knoten die Kante zum linken Kind mit 0, die zum
rechten Kind mit 1.
.
0
1
0
1
0
0
FG KTuEA, TU Ilmenau
1
0
1
0
1
1
0
0
1
0
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
1
1
46
Beweis: Wie in einem Kodierungsbaum markiere in jedem
inneren Knoten die Kante zum linken Kind mit 0, die zum
rechten Kind mit 1.
.
0
1
0
1
0
000
FG KTuEA, TU Ilmenau
1
1
0
0
1
0010
0011
010
1
0
0
10
1
0
1
0
1
0110
0111
1100
1101
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
111
46
Beweis: Wie in einem Kodierungsbaum markiere in jedem
inneren Knoten die Kante zum linken Kind mit 0, die zum
rechten Kind mit 1.
.
0
1
0
1
0
000
1
1
0
0
1
0010
0011
010
1
0
0
10
1
0
1
0
1
0110
0111
1100
1101
111
Jedem Blatt l entspricht dann eine Bitfolge wl = b1 · · · bd(l).
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
47
Beweis: Wie in einem Kodierungsbaum markiere in jedem
inneren Knoten die Kante zum linken Kind mit 0, die zum
rechten Kind mit 1.
.
0
1
0
1
0
000
1
1
0
0
1
0010
0011
010
1
0
0
10
1
0
1
0
1
0110
0111
1100
1101
111
Jedem Blatt l entspricht dann eine Bitfolge wl = b1 · · · bd(l).
Sei D = d(T ) die Tiefe des tiefsten Blatts.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
47
Jedes wl kann man auf 2D−d(l) Arten zu einer Bitfolge der
Länge D verlängern.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
48
Jedes wl kann man auf 2D−d(l) Arten zu einer Bitfolge der
Länge D verlängern.
Alle so erzeugten Bitfolgen sind verschieden;
alle 2D Bitfolgen werden so erzeugt.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
48
Jedes wl kann man auf 2D−d(l) Arten zu einer Bitfolge der
Länge D verlängern.
Alle so erzeugten Bitfolgen sind verschieden;
alle 2D Bitfolgen werden so erzeugt.
X
⇒
2D−d(l) = 2D .
l∈L
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
48
Jedes wl kann man auf 2D−d(l) Arten zu einer Bitfolge der
Länge D verlängern.
Alle so erzeugten Bitfolgen sind verschieden;
alle 2D Bitfolgen werden so erzeugt.
X
⇒
2D−d(l) = 2D .
l∈L
⇒ Behauptung.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
48
Proposition 3.3.5
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
49
Proposition 3.3.5
T hat N = n + 1 äußere Knoten ⇒ TEPL(T ) ≥ N log N .
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
49
Proposition 3.3.5
T hat N = n + 1 äußere Knoten ⇒ TEPL(T ) ≥ N log N .
Beweis: Die Logarithmusfunktion ist konkav :
log((1 − λ)a + λb)) ≥ (1 − λ) log a + λ log b, für 0 ≤ λ ≤ 1.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
49
Proposition 3.3.5
T hat N = n + 1 äußere Knoten ⇒ TEPL(T ) ≥ N log N .
Beweis: Die Logarithmusfunktion ist konkav :
log((1 − λ)a + λb)) ≥ (1 − λ) log a + λ log b, für 0 ≤ λ ≤ 1.
Daraus:
1
log( M
FG KTuEA, TU Ilmenau
P
1≤i≤M
ai) ≥
1
M
P
1≤i≤M
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
log(ai).
49
Proposition 3.3.5
T hat N = n + 1 äußere Knoten ⇒ TEPL(T ) ≥ N log N .
Beweis: Die Logarithmusfunktion ist konkav :
log((1 − λ)a + λb)) ≥ (1 − λ) log a + λ log b, für 0 ≤ λ ≤ 1.
Daraus:
1
log( M
P
1≤i≤M
ai) ≥
1
M
P
1≤i≤M
log(ai).
Anwenden auf M = N = n + 1
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
49
Proposition 3.3.5
T hat N = n + 1 äußere Knoten ⇒ TEPL(T ) ≥ N log N .
Beweis: Die Logarithmusfunktion ist konkav :
log((1 − λ)a + λb)) ≥ (1 − λ) log a + λ log b, für 0 ≤ λ ≤ 1.
Daraus:
1
log( M
P
1≤i≤M
ai) ≥
1
M
P
1≤i≤M
log(ai).
Anwenden auf M = N = n + 1 und al = 2−d(l), l ∈ L:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
49
Proposition 3.3.5
T hat N = n + 1 äußere Knoten ⇒ TEPL(T ) ≥ N log N .
Beweis: Die Logarithmusfunktion ist konkav :
log((1 − λ)a + λb)) ≥ (1 − λ) log a + λ log b, für 0 ≤ λ ≤ 1.
Daraus:
1
log( M
P
1≤i≤M
ai) ≥
1
M
P
1≤i≤M
log(ai).
Anwenden auf M = N = n + 1 und al = 2−d(l), l ∈ L:
P
1
log( N l∈L 2−d(l))
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
49
Proposition 3.3.5
T hat N = n + 1 äußere Knoten ⇒ TEPL(T ) ≥ N log N .
Beweis: Die Logarithmusfunktion ist konkav :
log((1 − λ)a + λb)) ≥ (1 − λ) log a + λ log b, für 0 ≤ λ ≤ 1.
Daraus:
1
log( M
P
1≤i≤M
ai) ≥
1
M
P
1≤i≤M
log(ai).
Anwenden auf M = N = n + 1 und al = 2−d(l), l ∈ L:
P
P
1
1
−d(l)
log( N l∈L 2
) ≥ N l∈L(−d(l)).
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
49
Proposition 3.3.5
T hat N = n + 1 äußere Knoten ⇒ TEPL(T ) ≥ N log N .
Beweis: Die Logarithmusfunktion ist konkav :
log((1 − λ)a + λb)) ≥ (1 − λ) log a + λ log b, für 0 ≤ λ ≤ 1.
Daraus:
1
log( M
P
1≤i≤M
ai) ≥
1
M
P
1≤i≤M
log(ai).
Anwenden auf M = N = n + 1 und al = 2−d(l), l ∈ L:
P
P
1
1
−d(l)
log( N l∈L 2
) ≥ N l∈L(−d(l)).
D.h.:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
49
Proposition 3.3.5
T hat N = n + 1 äußere Knoten ⇒ TEPL(T ) ≥ N log N .
Beweis: Die Logarithmusfunktion ist konkav :
log((1 − λ)a + λb)) ≥ (1 − λ) log a + λ log b, für 0 ≤ λ ≤ 1.
Daraus:
1
log( M
P
1≤i≤M
ai) ≥
1
M
P
1≤i≤M
log(ai).
Anwenden auf M = N = n + 1 und al = 2−d(l), l ∈ L:
P
P
1
1
−d(l)
log( N l∈L 2
) ≥ N l∈L(−d(l)).
X
P
2−d(l)
D.h.: TEPL(T ) = l∈L d(l) ≥ −N log N1
|l∈L {z
=1
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
}
49
Proposition 3.3.5
T hat N = n + 1 äußere Knoten ⇒ TEPL(T ) ≥ N log N .
Beweis: Die Logarithmusfunktion ist konkav :
log((1 − λ)a + λb)) ≥ (1 − λ) log a + λ log b, für 0 ≤ λ ≤ 1.
Daraus:
1
log( M
P
1≤i≤M
ai) ≥
1
M
P
1≤i≤M
log(ai).
Anwenden auf M = N = n + 1 und al = 2−d(l), l ∈ L:
P
P
1
1
−d(l)
log( N l∈L 2
) ≥ N l∈L(−d(l)).
X
P
2−d(l)
D.h.: TEPL(T ) = l∈L d(l) ≥ −N log N1
|l∈L {z
=1
Der letzte Term ist = −N log( N1 ) = N log N .
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
}
49
Folgerung:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
50
Folgerung:
Für die mittlere äußere Weglänge eines
Binärbaums T mit N Blättern gilt:
1
TEPL(T ) ≥ log N.
N
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
50
Folgerung:
Für die mittlere äußere Weglänge eines
Binärbaums T mit N Blättern gilt:
1
TEPL(T ) ≥ log N.
N
Nach Proposition 3.3.3: TEPL(T ) = TIPL(T ) + 2n
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
50
Folgerung:
Für die mittlere äußere Weglänge eines
Binärbaums T mit N Blättern gilt:
1
TEPL(T ) ≥ log N.
N
Nach Proposition 3.3.3: TEPL(T ) = TIPL(T ) + 2n
Also: TIPL(T ) ≥ TEPL(T ) − 2n ≥ (n + 1) log(n + 1) − 2n > n(log n − 2).
Folgerung:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
50
Folgerung:
Für die mittlere äußere Weglänge eines
Binärbaums T mit N Blättern gilt:
1
TEPL(T ) ≥ log N.
N
Nach Proposition 3.3.3: TEPL(T ) = TIPL(T ) + 2n
Also: TIPL(T ) ≥ TEPL(T ) − 2n ≥ (n + 1) log(n + 1) − 2n > n(log n − 2).
Folgerung:
Für die mittlere innere Weglänge eines
Binärbaums T mit n Knoten gilt:
1
TIPL(T ) > log n − 2.
n
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
50
3.4 Durchläufe durch Binärbäume
(D, Z)-Binärbäume kann man systematisch durchlaufen,
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
51
3.4 Durchläufe durch Binärbäume
(D, Z)-Binärbäume kann man systematisch durchlaufen, die
Knoten nacheinander besuchen und (anwendungsabhängige)
Aktionen an den Knoten ausführen.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
51
3.4 Durchläufe durch Binärbäume
(D, Z)-Binärbäume kann man systematisch durchlaufen, die
Knoten nacheinander besuchen und (anwendungsabhängige)
Aktionen an den Knoten ausführen.
Abstrakt gefasst: visit-Operation:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
51
3.4 Durchläufe durch Binärbäume
(D, Z)-Binärbäume kann man systematisch durchlaufen, die
Knoten nacheinander besuchen und (anwendungsabhängige)
Aktionen an den Knoten ausführen.
Abstrakt gefasst: visit-Operation:
organisiere data-Teil der Knoten als Objekte einer Klasse;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
51
3.4 Durchläufe durch Binärbäume
(D, Z)-Binärbäume kann man systematisch durchlaufen, die
Knoten nacheinander besuchen und (anwendungsabhängige)
Aktionen an den Knoten ausführen.
Abstrakt gefasst: visit-Operation:
organisiere data-Teil der Knoten als Objekte einer Klasse;
visit(T ) löst Abarbeitung einer Methode von data(T ) aus.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
51
3.4 Durchläufe durch Binärbäume
(D, Z)-Binärbäume kann man systematisch durchlaufen, die
Knoten nacheinander besuchen und (anwendungsabhängige)
Aktionen an den Knoten ausführen.
Abstrakt gefasst: visit-Operation:
organisiere data-Teil der Knoten als Objekte einer Klasse;
visit(T ) löst Abarbeitung einer Methode von data(T ) aus.
Möglichkeiten für visit bei Knoten v:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
51
3.4 Durchläufe durch Binärbäume
(D, Z)-Binärbäume kann man systematisch durchlaufen, die
Knoten nacheinander besuchen und (anwendungsabhängige)
Aktionen an den Knoten ausführen.
Abstrakt gefasst: visit-Operation:
organisiere data-Teil der Knoten als Objekte einer Klasse;
visit(T ) löst Abarbeitung einer Methode von data(T ) aus.
Möglichkeiten für visit bei Knoten v:
– Daten data(v) ausgeben;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
51
3.4 Durchläufe durch Binärbäume
(D, Z)-Binärbäume kann man systematisch durchlaufen, die
Knoten nacheinander besuchen und (anwendungsabhängige)
Aktionen an den Knoten ausführen.
Abstrakt gefasst: visit-Operation:
organisiere data-Teil der Knoten als Objekte einer Klasse;
visit(T ) löst Abarbeitung einer Methode von data(T ) aus.
Möglichkeiten für visit bei Knoten v:
– Daten data(v) ausgeben;
– laufende Nummer für v vergeben;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
51
3.4 Durchläufe durch Binärbäume
(D, Z)-Binärbäume kann man systematisch durchlaufen, die
Knoten nacheinander besuchen und (anwendungsabhängige)
Aktionen an den Knoten ausführen.
Abstrakt gefasst: visit-Operation:
organisiere data-Teil der Knoten als Objekte einer Klasse;
visit(T ) löst Abarbeitung einer Methode von data(T ) aus.
Möglichkeiten für visit bei Knoten v:
– Daten data(v) ausgeben;
– laufende Nummer für v vergeben;
– Zeiger auf v an Liste anhängen;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
51
3.4 Durchläufe durch Binärbäume
(D, Z)-Binärbäume kann man systematisch durchlaufen, die
Knoten nacheinander besuchen und (anwendungsabhängige)
Aktionen an den Knoten ausführen.
Abstrakt gefasst: visit-Operation:
organisiere data-Teil der Knoten als Objekte einer Klasse;
visit(T ) löst Abarbeitung einer Methode von data(T ) aus.
Möglichkeiten für visit bei Knoten v:
– Daten data(v) ausgeben;
– laufende Nummer für v vergeben;
– Zeiger auf v an Liste anhängen;
– zu v gehörende Aktion ausführen
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
51
3.4 Durchläufe durch Binärbäume
(D, Z)-Binärbäume kann man systematisch durchlaufen, die
Knoten nacheinander besuchen und (anwendungsabhängige)
Aktionen an den Knoten ausführen.
Abstrakt gefasst: visit-Operation:
organisiere data-Teil der Knoten als Objekte einer Klasse;
visit(T ) löst Abarbeitung einer Methode von data(T ) aus.
Möglichkeiten für visit bei Knoten v:
– Daten data(v) ausgeben;
– laufende Nummer für v vergeben;
– Zeiger auf v an Liste anhängen;
– zu v gehörende Aktion ausführen
(z. B. arithmetische Operation durchführen) usw.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
51
Inorder-Durchlauf durch T
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
52
Inorder-Durchlauf durch T
falls T = (z):
e-visit(z) ;
FG KTuEA, TU Ilmenau
// besuche äußeren Knoten
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
52
Inorder-Durchlauf durch T
falls T = (z):
e-visit(z) ;
// besuche äußeren Knoten
falls T = (T1, x, T2):
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
52
Inorder-Durchlauf durch T
falls T = (z):
e-visit(z) ;
// besuche äußeren Knoten
falls T = (T1, x, T2):
Inorder-Durchlauf durch T1;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
52
Inorder-Durchlauf durch T
falls T = (z):
e-visit(z) ;
// besuche äußeren Knoten
falls T = (T1, x, T2):
Inorder-Durchlauf durch T1;
i-visit(x) ;
// besuche inneren Knoten
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
52
Inorder-Durchlauf durch T
falls T = (z):
e-visit(z) ;
// besuche äußeren Knoten
falls T = (T1, x, T2):
Inorder-Durchlauf durch T1;
i-visit(x) ;
// besuche inneren Knoten
Inorder-Durchlauf durch T2.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
52
Inorder-Durchlauf durch T
b
c
7
b
37
d
u
29
a
17
FG KTuEA, TU Ilmenau
z
31
13
r
1
3
23
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
53
Inorder-Durchlauf durch T
b
c
7
b
37
FG KTuEA, TU Ilmenau
d
u
29
a
17
Ausgabe:
z
31
13
r
1
3
23
37, b, 17, a, 31, c, 7, b, 29, d, 1, r, 23, z, 13, u, 3.
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
53
Inorder-Durchlauf durch T
b
c
z
7
b
37
u
29
a
17
d
31
13
r
1
3
23
Ausgabe: 37, b, 17, a, 31, c, 7, b, 29, d, 1, r, 23, z, 13, u, 3.
Beobachte: Abwechselnd externe und interne Knoten.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
53
Inorder-Durchlauf durch T
b
1
0
0
1
c
z
1
0
0
1
11
00
00
11
7
1
0
0
1
b
1
0
37
11
00
00
11
a
11
00
00
11
17
31
1
0
11
0 00
1
d
u
1
0
29
11
00
11
00
r
11
00
00
11
1
13
11
00
00
11
3
1
0
0
1
23
11
00
00
00 11
11
00
11
Ausgabe: 37, b, 17, a, 31, c, 7, b, 29, d, 1, r, 23, z, 13, u, 3.
Beobachte: Abwechselnd externe und interne Knoten.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
53
Präorder-Durchlauf durch T
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
54
Präorder-Durchlauf durch T
falls T = (z):
e-visit(z) ;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
54
Präorder-Durchlauf durch T
falls T = (z):
e-visit(z) ;
falls T = (T1, x, T2):
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
54
Präorder-Durchlauf durch T
falls T = (z):
e-visit(z) ;
falls T = (T1, x, T2):
i-visit(x) ;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
54
Präorder-Durchlauf durch T
falls T = (z):
e-visit(z) ;
falls T = (T1, x, T2):
i-visit(x) ;
Präorder-Durchlauf durch T1;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
54
Präorder-Durchlauf durch T
falls T = (z):
e-visit(z) ;
falls T = (T1, x, T2):
i-visit(x) ;
Präorder-Durchlauf durch T1;
Präorder-Durchlauf durch T2;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
54
Präorder-Durchlauf durch T
b
c
7
b
37
d
u
29
a
17
FG KTuEA, TU Ilmenau
z
31
13
r
1
3
23
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
55
Präorder-Durchlauf durch T
b
c
7
b
37
FG KTuEA, TU Ilmenau
d
u
29
a
17
Ausgabe:
z
31
13
r
1
3
23
b, c, b, 37, a, 17, 31, 7, z, d, 29, r, 1, 23, u, 13, 3
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
55
Präorder-Durchlauf durch T
1
0
0b
1
1
0
1
0
0z
1
c
11
00
00b
11
37
11
00
00
11
1
0
0
1
1a
0
17
11
00
31
FG KTuEA, TU Ilmenau
00 u
11
d
29
1
0
11
0 00
1
Ausgabe:
1
0
7
1r
0
1
13
11
00
00
11
3
1
0
0
1
23
11
00
00
00 11
11
00
11
b, c, b, 37, a, 17, 31, 7, z, d, 29, r, 1, 23, u, 13, 3
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
55
Postorder-Durchlauf durch T
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
56
Postorder-Durchlauf durch T
falls T = (z):
e-visit(z) ;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
56
Postorder-Durchlauf durch T
falls T = (z):
e-visit(z) ;
falls T = (T1, x, T2):
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
56
Postorder-Durchlauf durch T
falls T = (z):
e-visit(z) ;
falls T = (T1, x, T2):
Postorder-Durchlauf durch T1;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
56
Postorder-Durchlauf durch T
falls T = (z):
e-visit(z) ;
falls T = (T1, x, T2):
Postorder-Durchlauf durch T1;
Postorder-Durchlauf durch T2;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
56
Postorder-Durchlauf durch T
falls T = (z):
e-visit(z) ;
falls T = (T1, x, T2):
Postorder-Durchlauf durch T1;
Postorder-Durchlauf durch T2;
i-visit(x) ;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
56
Postorder-Durchlauf durch T
b
c
7
b
37
d
u
29
a
17
FG KTuEA, TU Ilmenau
z
31
13
r
1
3
23
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
57
Postorder-Durchlauf durch T
b
c
7
b
37
FG KTuEA, TU Ilmenau
d
u
29
a
17
Ausgabe:
z
31
13
r
1
3
23
37, 17, 31, a, b, 7, c, 29, 1, 23, r, d, 13, 3, u, z, b.
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
57
Postorder-Durchlauf durch T
b
c
00
11
b11
00
37
11
00
00
11
17
1
0
FG KTuEA, TU Ilmenau
z
1
0
0
1
1
0
31
1
0
11
0 00
1
Ausgabe:
11
00
7
a
1
0
0
1
d
1
0
0
1
u
11
00
r
29
11
00
1
13
11
00
00
11
1
0
3
1
0
0
1
23
11
00
00
00 11
11
00
11
37, 17, 31, a, b, 7, c, 29, 1, 23, r, d, 13, 3, u, z, b.
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
57
Beispiel: Arithmetischer Ausdruck als Baum
D = {+, −, ·, /} und Z = {x1, x2, x3, . . .}.
Postorder-Durchlauf.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
58
Beispiel: Arithmetischer Ausdruck als Baum
D = {+, −, ·, /} und Z = {x1, x2, x3, . . .}.
/
−
+
−
x2
x4
x9
/
x7
x5
x5
−
x3
x1
−
+
x6
x6
x3
x1
Ordne den Blättern konkrete Werte zu, z.B. x1 = 5, x2 = 3,
x3 = −2, x4 = −7, x5 = 7, x6 = 10, x7 = 5, x9 = −5.
Auswertungsprozedur ordnet jedem Knoten einen Wert zu.
Geeignete Reihenfolge: Postorder-Durchlauf.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
58
Beispiel: Arithmetischer Ausdruck als Baum
D = {+, −, ·, /} und Z = {x1, x2, x3, . . .}.
/
+
−
+
−
3
−2
−5
/
5
7
7
−
−7
5
−
10
10
−2
5
Ordne den Blättern konkrete Werte zu, z.B. x1 = 5, x2 = 3,
x3 = −2, x4 = −7, x5 = 7, x6 = 10, x7 = 5, x9 = −5.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
59
Beispiel: Arithmetischer Ausdruck als Baum
D = {+, −, ·, /} und Z = {x1, x2, x3, . . .}.
/
+
−
+
−
3
−2
−5
/
5
7
7
−
−7
5
−
10
10
−2
5
Ordne den Blättern konkrete Werte zu, z.B. x1 = 5, x2 = 3,
x3 = −2, x4 = −7, x5 = 7, x6 = 10, x7 = 5, x9 = −5.
Auswertungsprozedur ordnet jedem Knoten einen Wert zu.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
59
Beispiel: Arithmetischer Ausdruck als Baum
D = {+, −, ·, /} und Z = {x1, x2, x3, . . .}.
/
+
−
+
−
3
−2
−5
/
5
7
7
−
−7
5
−
10
10
−2
5
Ordne den Blättern konkrete Werte zu, z.B. x1 = 5, x2 = 3,
x3 = −2, x4 = −7, x5 = 7, x6 = 10, x7 = 5, x9 = −5.
Auswertungsprozedur ordnet jedem Knoten einen Wert zu.
Geeignete Reihenfolge:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
59
Beispiel: Arithmetischer Ausdruck als Baum
D = {+, −, ·, /} und Z = {x1, x2, x3, . . .}.
/
+
−
+
−
3
−2
−5
/
5
7
7
−
−7
5
−
10
10
−2
5
Ordne den Blättern konkrete Werte zu, z.B. x1 = 5, x2 = 3,
x3 = −2, x4 = −7, x5 = 7, x6 = 10, x7 = 5, x9 = −5.
Auswertungsprozedur ordnet jedem Knoten einen Wert zu.
Geeignete Reihenfolge: Postorder-Durchlauf.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
59
Beispiel: Arithmetischer Ausdruck als Baum
D = {+, −, ·, /} und Z = {x1, x2, x3, . . .}.
/
+
−
+
5
−
−21
−
3
−
−7
−2
−5
/
5
7
7
10
10
−2
5
Ordne den Blättern konkrete Werte zu, z.B. x1 = 5, x2 = 3,
x3 = −2, x4 = −7, x5 = 7, x6 = 10, x7 = 5, x9 = −5.
Auswertungsprozedur ordnet jedem Knoten einen Wert zu.
Geeignete Reihenfolge: Postorder-Durchlauf.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
59
Beispiel: Arithmetischer Ausdruck als Baum
D = {+, −, ·, /} und Z = {x1, x2, x3, . . .}.
/
+
−
+
5
−
−21
−
3
−7
−7
−
−2
−5
/
5
7
7
10
10
−2
5
Ordne den Blättern konkrete Werte zu, z.B. x1 = 5, x2 = 3,
x3 = −2, x4 = −7, x5 = 7, x6 = 10, x7 = 5, x9 = −5.
Auswertungsprozedur ordnet jedem Knoten einen Wert zu.
Geeignete Reihenfolge: Postorder-Durchlauf.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
59
Beispiel: Arithmetischer Ausdruck als Baum
D = {+, −, ·, /} und Z = {x1, x2, x3, . . .}.
/
+
−
+
5
−
−21
−
3
−7
2
−7
−
−2
−5
/
5
10
7
7
10
−2
5
Ordne den Blättern konkrete Werte zu, z.B. x1 = 5, x2 = 3,
x3 = −2, x4 = −7, x5 = 7, x6 = 10, x7 = 5, x9 = −5.
Auswertungsprozedur ordnet jedem Knoten einen Wert zu.
Geeignete Reihenfolge: Postorder-Durchlauf.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
59
Beispiel: Arithmetischer Ausdruck als Baum
D = {+, −, ·, /} und Z = {x1, x2, x3, . . .}.
/
+
−
+
−21
−9
−
3
5
−
−7
2
−7
−
−2
−5
/
5
10
7
7
10
−2
5
Ordne den Blättern konkrete Werte zu, z.B. x1 = 5, x2 = 3,
x3 = −2, x4 = −7, x5 = 7, x6 = 10, x7 = 5, x9 = −5.
Auswertungsprozedur ordnet jedem Knoten einen Wert zu.
Geeignete Reihenfolge: Postorder-Durchlauf.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
59
Beispiel: Arithmetischer Ausdruck als Baum
D = {+, −, ·, /} und Z = {x1, x2, x3, . . .}.
/
+
−
−30
+
−21
−9
−
3
5
−
−7
2
−7
−
−2
−5
/
5
10
7
7
10
−2
5
Ordne den Blättern konkrete Werte zu, z.B. x1 = 5, x2 = 3,
x3 = −2, x4 = −7, x5 = 7, x6 = 10, x7 = 5, x9 = −5.
Auswertungsprozedur ordnet jedem Knoten einen Wert zu.
Geeignete Reihenfolge: Postorder-Durchlauf.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
59
Beispiel: Arithmetischer Ausdruck als Baum
D = {+, −, ·, /} und Z = {x1, x2, x3, . . .}.
/
+
−
−30
+
−21
10
−9
−
3
−7
−5
/
5
10
7
7
2
−7
−
−2
5
−
10
−2
5
Ordne den Blättern konkrete Werte zu, z.B. x1 = 5, x2 = 3,
x3 = −2, x4 = −7, x5 = 7, x6 = 10, x7 = 5, x9 = −5.
Auswertungsprozedur ordnet jedem Knoten einen Wert zu.
Geeignete Reihenfolge: Postorder-Durchlauf.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
59
Beispiel: Arithmetischer Ausdruck als Baum
D = {+, −, ·, /} und Z = {x1, x2, x3, . . .}.
/
+
−
−30
+
70
−21
10
−9
−
3
−7
−5
/
5
10
7
7
2
−7
−
−2
5
−
10
−2
5
Ordne den Blättern konkrete Werte zu, z.B. x1 = 5, x2 = 3,
x3 = −2, x4 = −7, x5 = 7, x6 = 10, x7 = 5, x9 = −5.
Auswertungsprozedur ordnet jedem Knoten einen Wert zu.
Geeignete Reihenfolge: Postorder-Durchlauf.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
59
Beispiel: Arithmetischer Ausdruck als Baum
D = {+, −, ·, /} und Z = {x1, x2, x3, . . .}.
/
40
+
−
−30
+
70
−21
10
−9
−
3
−7
−5
/
5
10
7
7
2
−7
−
−2
5
−
10
−2
5
Ordne den Blättern konkrete Werte zu, z.B. x1 = 5, x2 = 3,
x3 = −2, x4 = −7, x5 = 7, x6 = 10, x7 = 5, x9 = −5.
Auswertungsprozedur ordnet jedem Knoten einen Wert zu.
Geeignete Reihenfolge: Postorder-Durchlauf.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
59
Beispiel: Arithmetischer Ausdruck als Baum
D = {+, −, ·, /} und Z = {x1, x2, x3, . . .}.
/
40
+
−
−30
+
70
−21
−
3
−7
−2
−5
/
10
7
7
2
5
5
10
−9
−7
−
−3
−
10
−2
5
Ordne den Blättern konkrete Werte zu, z.B. x1 = 5, x2 = 3,
x3 = −2, x4 = −7, x5 = 7, x6 = 10, x7 = 5, x9 = −5.
Auswertungsprozedur ordnet jedem Knoten einen Wert zu.
Geeignete Reihenfolge: Postorder-Durchlauf.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
59
Beispiel: Arithmetischer Ausdruck als Baum
D = {+, −, ·, /} und Z = {x1, x2, x3, . . .}.
/
40
+
−8
−
−30
+
70
−21
−
3
−7
−2
−5
/
10
7
7
2
5
5
10
−9
−7
−
−3
−
10
−2
5
Ordne den Blättern konkrete Werte zu, z.B. x1 = 5, x2 = 3,
x3 = −2, x4 = −7, x5 = 7, x6 = 10, x7 = 5, x9 = −5.
Auswertungsprozedur ordnet jedem Knoten einen Wert zu.
Geeignete Reihenfolge: Postorder-Durchlauf.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
59
Beispiel: Arithmetischer Ausdruck als Baum
D = {+, −, ·, /} und Z = {x1, x2, x3, . . .}.
−5
/
40
+
−8
−
−30
+
70
−21
−
3
−7
−2
−5
/
10
7
7
2
5
5
10
−9
−7
−
−3
−
10
−2
5
Ordne den Blättern konkrete Werte zu, z.B. x1 = 5, x2 = 3,
x3 = −2, x4 = −7, x5 = 7, x6 = 10, x7 = 5, x9 = −5.
Auswertungsprozedur ordnet jedem Knoten einen Wert zu.
Geeignete Reihenfolge: Postorder-Durchlauf.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
59
Beispiel: Arithmetischer Ausdruck als Baum
D = {+, −, ·, /} und Z = {x1, x2, x3, . . .}.
/
40
+
−30
0
5
+ 1
0
1
−21
11
00
1
00
11
3
−7
−7
−
−2
1
0
8
0
1
−9
11
00
− 4
7
00
11
2
0
1
00
11
/ 3
0
1
00
11
2
0
1
00
11
5
10
−5
0
1
1
0
11
0
1
−81
0
0
10
− 1
0
1
70
11
00
00
11
7
00
11
−3 1
0
0
5
− 1
9
0
1
10
1
0
6
0
1
−5
7
10
−2
5
Ordne den Blättern konkrete Werte zu, z.B. x1 = 5, x2 = 3,
x3 = −2, x4 = −7, x5 = 7, x6 = 10, x7 = 5, x9 = −5.
Auswertungsprozedur ordnet jedem Knoten einen Wert zu.
Geeignete Reihenfolge: Postorder-Durchlauf. (Rote Kreise.)
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
59
Auch möglich: Kombi-Durchlauf:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
60
Auch möglich: Kombi-Durchlauf:
falls T = (z):
e-visit(z) ;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
60
Auch möglich: Kombi-Durchlauf:
falls T = (z):
e-visit(z) ;
falls T = (T1, x, T2):
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
60
Auch möglich: Kombi-Durchlauf:
falls T = (z):
e-visit(z) ;
falls T = (T1, x, T2):
preord-i-visit(x) ;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
60
Auch möglich: Kombi-Durchlauf:
falls T = (z):
e-visit(z) ;
falls T = (T1, x, T2):
preord-i-visit(x) ;
Kombi-Durchlauf durch T1;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
60
Auch möglich: Kombi-Durchlauf:
falls T = (z):
e-visit(z) ;
falls T = (T1, x, T2):
preord-i-visit(x) ;
Kombi-Durchlauf durch T1;
inord-i-visit(x) ;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
60
Auch möglich: Kombi-Durchlauf:
falls T = (z):
e-visit(z) ;
falls T = (T1, x, T2):
preord-i-visit(x) ;
Kombi-Durchlauf durch T1;
inord-i-visit(x) ;
Kombi-Durchlauf durch T2;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
60
Auch möglich: Kombi-Durchlauf:
falls T = (z):
e-visit(z) ;
falls T = (T1, x, T2):
preord-i-visit(x) ;
Kombi-Durchlauf durch T1;
inord-i-visit(x) ;
Kombi-Durchlauf durch T2;
postord-i-visit(x) ;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
60
Auch möglich: Kombi-Durchlauf:
falls T = (z):
e-visit(z) ;
falls T = (T1, x, T2):
preord-i-visit(x) ;
Kombi-Durchlauf durch T1;
inord-i-visit(x) ;
Kombi-Durchlauf durch T2;
postord-i-visit(x) ;
Ermöglicht Datentransport von der Wurzel nach unten in den
Baum hinein und wieder zurück.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
60
Kombi-Durchlauf durch T
11
00
00b11
11
00
00
11
1
0
37
11
00
00
11
0
1
c 0
1
0
1
0
1
7
1
0
0
1
29
0a 0
1
1
00
11
00
11
00
11
17
31
1
0
11
0 00
1
FG KTuEA, TU Ilmenau
0
1
1
0
0
0b 1
1
0
1
0
1
1
0
11
000
1
z
00
11
00
11
1 0
0
1
0
d 1
1
0
11 u
00
11
00
11
13
0 00
1
r
00
11
00
11
00
00 11
11
1
1
0
3
1
0
0
1
23
11
00
00
00 11
11
00
11
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
61
Beispiel für Anwendung eines Kombi-Durchlaufs:
Generierung einer String-Darstellung eines Binärbaums.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
62
Beispiel für Anwendung eines Kombi-Durchlaufs:
Generierung einer String-Darstellung eines Binärbaums.
Zeichen werden sequenziell in die Ausgabe geschrieben.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
62
Beispiel für Anwendung eines Kombi-Durchlaufs:
Generierung einer String-Darstellung eines Binärbaums.
Zeichen werden sequenziell in die Ausgabe geschrieben.
e-visit(z):
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
62
Beispiel für Anwendung eines Kombi-Durchlaufs:
Generierung einer String-Darstellung eines Binärbaums.
Zeichen werden sequenziell in die Ausgabe geschrieben.
e-visit(z): Schreibe (z)“.
”
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
62
Beispiel für Anwendung eines Kombi-Durchlaufs:
Generierung einer String-Darstellung eines Binärbaums.
Zeichen werden sequenziell in die Ausgabe geschrieben.
e-visit(z): Schreibe (z)“.
”
preord-i-visit(x):
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
62
Beispiel für Anwendung eines Kombi-Durchlaufs:
Generierung einer String-Darstellung eines Binärbaums.
Zeichen werden sequenziell in die Ausgabe geschrieben.
e-visit(z): Schreibe (z)“.
”
preord-i-visit(x): Schreibe (“.
”
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
62
Beispiel für Anwendung eines Kombi-Durchlaufs:
Generierung einer String-Darstellung eines Binärbaums.
Zeichen werden sequenziell in die Ausgabe geschrieben.
e-visit(z): Schreibe (z)“.
”
preord-i-visit(x): Schreibe (“.
”
inord-i-visit(x):
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
62
Beispiel für Anwendung eines Kombi-Durchlaufs:
Generierung einer String-Darstellung eines Binärbaums.
Zeichen werden sequenziell in die Ausgabe geschrieben.
e-visit(z): Schreibe (z)“.
”
preord-i-visit(x): Schreibe (“.
”
inord-i-visit(x): Schreibe , x,“.
”
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
62
Beispiel für Anwendung eines Kombi-Durchlaufs:
Generierung einer String-Darstellung eines Binärbaums.
Zeichen werden sequenziell in die Ausgabe geschrieben.
e-visit(z): Schreibe (z)“.
”
preord-i-visit(x): Schreibe (“.
”
inord-i-visit(x): Schreibe , x,“.
”
postord-i-visit(x):
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
62
Beispiel für Anwendung eines Kombi-Durchlaufs:
Generierung einer String-Darstellung eines Binärbaums.
Zeichen werden sequenziell in die Ausgabe geschrieben.
e-visit(z): Schreibe (z)“.
”
preord-i-visit(x): Schreibe (“.
”
inord-i-visit(x): Schreibe , x,“.
”
postord-i-visit(x): Schreibe )“.
”
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
62
Zeitanalyse für Durchlauf
Die Baumdurchläufe können mittels rekursiver Prozeduren
implementiert werden.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
63
Zeitanalyse für Durchlauf
Die Baumdurchläufe können mittels rekursiver Prozeduren
implementiert werden.
Beispiel: Inorder-Durchlauf. Prozedur: inorder(T)
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
63
Zeitanalyse für Durchlauf
Die Baumdurchläufe können mittels rekursiver Prozeduren
implementiert werden.
Beispiel: Inorder-Durchlauf. Prozedur: inorder(T)
Angewendet auf einen Baum T mit n inneren Knoten.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
63
Zeitanalyse für Durchlauf
Die Baumdurchläufe können mittels rekursiver Prozeduren
implementiert werden.
Beispiel: Inorder-Durchlauf. Prozedur: inorder(T)
Angewendet auf einen Baum T mit n inneren Knoten.
Für jeden inneren und äußeren Knoten wird die Prozedur inorder(.)
einmal aufgerufen,
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
63
Zeitanalyse für Durchlauf
Die Baumdurchläufe können mittels rekursiver Prozeduren
implementiert werden.
Beispiel: Inorder-Durchlauf. Prozedur: inorder(T)
Angewendet auf einen Baum T mit n inneren Knoten.
Für jeden inneren und äußeren Knoten wird die Prozedur inorder(.)
einmal aufgerufen, insgesamt (2n + 1)-mal.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
63
Zeitanalyse für Durchlauf
Die Baumdurchläufe können mittels rekursiver Prozeduren
implementiert werden.
Beispiel: Inorder-Durchlauf. Prozedur: inorder(T)
Angewendet auf einen Baum T mit n inneren Knoten.
Für jeden inneren und äußeren Knoten wird die Prozedur inorder(.)
einmal aufgerufen, insgesamt (2n + 1)-mal.
Kosten pro Aufruf:
O(1) plus Kosten für i-visit/e-visit-Operation.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
63
Zeitanalyse für Durchlauf
Die Baumdurchläufe können mittels rekursiver Prozeduren
implementiert werden.
Beispiel: Inorder-Durchlauf. Prozedur: inorder(T)
Angewendet auf einen Baum T mit n inneren Knoten.
Für jeden inneren und äußeren Knoten wird die Prozedur inorder(.)
einmal aufgerufen, insgesamt (2n + 1)-mal.
Kosten pro Aufruf:
O(1) plus Kosten für i-visit/e-visit-Operation.
Insgesamt: (2n + 1) · (O(1) + Cvisit), wo Cvisit eine Schranke für die
Kosten der visit-Operationen ist.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
63
Zeitanalyse für Durchlauf
Die Baumdurchläufe können mittels rekursiver Prozeduren
implementiert werden.
Beispiel: Inorder-Durchlauf. Prozedur: inorder(T)
Angewendet auf einen Baum T mit n inneren Knoten.
Für jeden inneren und äußeren Knoten wird die Prozedur inorder(.)
einmal aufgerufen, insgesamt (2n + 1)-mal.
Kosten pro Aufruf:
O(1) plus Kosten für i-visit/e-visit-Operation.
Insgesamt: (2n + 1) · (O(1) + Cvisit), wo Cvisit eine Schranke für die
Kosten der visit-Operationen ist.
Fazit: Baumdurchläufe haben lineare Laufzeit.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
63
Levelorder-Durchlauf
a
0:
c
1:
a
2:
3:
FG KTuEA, TU Ilmenau
e
d
c
c
d
b
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
d
f
64
Levelorder-Durchlauf
a
0:
c
1:
a
2:
3:
e
d
c
c
d
b
d
f
Wunschausgabe:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
64
Levelorder-Durchlauf
a
0:
c
1:
a
2:
3:
e
d
c
c
d
b
d
f
Wunschausgabe: a cd acc edbdf
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
64
Levelorder-Durchlauf
a
0:
c
1:
a
2:
3:
e
d
c
c
d
b
d
f
Wunschausgabe: a cd acc edbdf
zeilenweise von links nach rechts“
”
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
64
Levelorder-Durchlauf
a
0:
c
1:
a
2:
3:
e
d
c
c
d
b
d
f
Wunschausgabe: a cd acc edbdf
zeilenweise von links nach rechts“
”
Benutze Queue Q, die Zeiger/Referenzen auf Binärbaumknoten speichern kann.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
64
Prozedur Leveldurchlauf (leere äußere Knoten)
Eingabe: v: node; // Wurzel
(1)
Q: Queue für node;
(2)
count ← 0;
(3)
if v <> NIL then // entdecke v
(4)
count++; v.lnum ← count;
(5)
v.level ← 0; enqueue(v);
(6)
while not Q.isempty repeat
(7)
w ← Q.first; Q.dequeue;
(8)
visit(w); // bearbeite w
(9)
p ← w.leftchild;
(10)
if p <> NIL then
(11)
count++; p.lnum ← count; // entdecke p
(12)
p.level ← w.level + 1; enqueue(p);
(13)
p ← w.rightchild;
(14)
if p <> NIL then
(15)
count++; p.lnum ← count; // entdecke p
(16)
p.level ← w.level + 1; enqueue(p);
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
65
Prozedur Leveldurchlauf (leere äußere Knoten)
Eingabe: v: node; // Wurzel
(1)
Q: Queue für node;
count ← 0;
(2)
(3)
if v <> NIL then // entdecke v
(4)
count++; v.lnum ← count;
(5)
v.level ← 0; enqueue(v);
(6)
while not Q.isempty repeat
(7)
w ← Q.first; Q.dequeue;
(8)
visit(w); // bearbeite w
(9)
p ← w.leftchild;
(10)
if p <> NIL then
(11)
count++; p.lnum ← count; // entdecke p
(12)
p.level ← w.level + 1; enqueue(p);
(13)
p ← w.rightchild;
(14)
if p <> NIL then
(15)
count++; p.lnum ← count; // entdecke p
(16)
p.level ← w.level + 1; enqueue(p);
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
65
Prozedur Leveldurchlauf (leere äußere Knoten)
Eingabe: v: node; // Wurzel
(1)
Q: Queue für node;
(2)
count ← 0;
(3)
if v <> NIL then // entdecke v
(4)
count++; v.lnum ← count;
(5)
v.level ← 0; enqueue(v);
(6)
while not Q.isempty repeat
(7)
w ← Q.first; Q.dequeue;
(8)
visit(w); // bearbeite w
(9)
p ← w.leftchild;
(10)
if p <> NIL then
(11)
count++; p.lnum ← count; // entdecke p
(12)
p.level ← w.level + 1; enqueue(p);
(13)
p ← w.rightchild;
(14)
if p <> NIL then
(15)
count++; p.lnum ← count; // entdecke p
(16)
p.level ← w.level + 1; enqueue(p);
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
65
Prozedur Leveldurchlauf (leere äußere Knoten)
Eingabe: v: node; // Wurzel
(1)
Q: Queue für node;
(2)
count ← 0;
(3)
if v <> NIL then // entdecke v
(4)
count++; v.lnum ← count;
(5)
v.level ← 0; enqueue(v);
(6)
while not Q.isempty repeat
(7)
w ← Q.first; Q.dequeue;
(8)
visit(w); // bearbeite w
(9)
p ← w.leftchild;
(10)
if p <> NIL then
(11)
count++; p.lnum ← count; // entdecke p
(12)
p.level ← w.level + 1; enqueue(p);
(13)
p ← w.rightchild;
(14)
if p <> NIL then
(15)
count++; p.lnum ← count; // entdecke p
(16)
p.level ← w.level + 1; enqueue(p);
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
65
Prozedur Leveldurchlauf (leere äußere Knoten)
Eingabe: v: node; // Wurzel
(1)
Q: Queue für node;
(2)
count ← 0;
(3)
if v <> NIL then // entdecke v
(4)
count++; v.lnum ← count;
(5)
v.level ← 0; enqueue(v);
(6)
while not Q.isempty repeat
(7)
w ← Q.first; Q.dequeue;
(8)
visit(w); // bearbeite w
(9)
p ← w.leftchild;
(10)
if p <> NIL then
(11)
count++; p.lnum ← count; // entdecke p
(12)
p.level ← w.level + 1; enqueue(p);
(13)
p ← w.rightchild;
(14)
if p <> NIL then
(15)
count++; p.lnum ← count; // entdecke p
(16)
p.level ← w.level + 1; enqueue(p);
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
65
Prozedur Leveldurchlauf (leere äußere Knoten)
Eingabe: v: node; // Wurzel
(1)
Q: Queue für node;
(2)
count ← 0;
(3)
if v <> NIL then // entdecke v
(4)
count++; v.lnum ← count;
(5)
v.level ← 0; enqueue(v);
(6)
while not Q.isempty repeat
(7)
w ← Q.first; Q.dequeue;
(8)
visit(w); // bearbeite w
(9)
p ← w.leftchild;
(10)
if p <> NIL then
(11)
count++; p.lnum ← count; // entdecke p
(12)
p.level ← w.level + 1; enqueue(p);
(13)
p ← w.rightchild;
(14)
if p <> NIL then
(15)
count++; p.lnum ← count; // entdecke p
(16)
p.level ← w.level + 1; enqueue(p);
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
65
Prozedur Leveldurchlauf (leere äußere Knoten)
Eingabe: v: node; // Wurzel
(1)
Q: Queue für node;
(2)
count ← 0;
(3)
if v <> NIL then // entdecke v
(4)
count++; v.lnum ← count;
(5)
v.level ← 0; enqueue(v);
(6)
while not Q.isempty repeat
(7)
w ← Q.first; Q.dequeue;
(8)
visit(w); // bearbeite w
(9)
p ← w.leftchild;
(10)
if p <> NIL then
(11)
count++; p.lnum ← count; // entdecke p
(12)
p.level ← w.level + 1; enqueue(p);
(13)
p ← w.rightchild;
(14)
if p <> NIL then
(15)
count++; p.lnum ← count; // entdecke p
p.level ← w.level + 1; enqueue(p);
(16)
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
65
Behauptung 3.4.2
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
66
Behauptung 3.4.2
FG KTuEA, TU Ilmenau
Lineare Zeit, Korrektheit“
”
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
66
Behauptung 3.4.2
Lineare Zeit, Korrektheit“
”
(a) Levelorder-Durchlauf benötigt Zeit
n · tvisit + O(n), wobei tvisit die Zeit für visit angibt.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
66
Behauptung 3.4.2
Lineare Zeit, Korrektheit“
”
(a) Levelorder-Durchlauf benötigt Zeit
n · tvisit + O(n), wobei tvisit die Zeit für visit angibt.
(b) Der Levelorder-Durchlauf ordnet jedem
Binärbaumknoten v (in v.level) korrekt seine Tiefe zu.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
66
Behauptung 3.4.2
Lineare Zeit, Korrektheit“
”
(a) Levelorder-Durchlauf benötigt Zeit
n · tvisit + O(n), wobei tvisit die Zeit für visit angibt.
(b) Der Levelorder-Durchlauf ordnet jedem
Binärbaumknoten v (in v.level) korrekt seine Tiefe zu.
Beweis: Man zeigt durch Induktion über das Level von v:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
66
Behauptung 3.4.2
Lineare Zeit, Korrektheit“
”
(a) Levelorder-Durchlauf benötigt Zeit
n · tvisit + O(n), wobei tvisit die Zeit für visit angibt.
(b) Der Levelorder-Durchlauf ordnet jedem
Binärbaumknoten v (in v.level) korrekt seine Tiefe zu.
Beweis: Man zeigt durch Induktion über das Level von v:
Jeder innere Knoten v des Binärbaums wird genau einmal
in die Queue eingefügt, genau einmal entnommen und im
Schleifenrumpf (7)-(16) bearbeitet.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
66
Behauptung 3.4.2
Lineare Zeit, Korrektheit“
”
(a) Levelorder-Durchlauf benötigt Zeit
n · tvisit + O(n), wobei tvisit die Zeit für visit angibt.
(b) Der Levelorder-Durchlauf ordnet jedem
Binärbaumknoten v (in v.level) korrekt seine Tiefe zu.
Beweis: Man zeigt durch Induktion über das Level von v:
Jeder innere Knoten v des Binärbaums wird genau einmal
in die Queue eingefügt, genau einmal entnommen und im
Schleifenrumpf (7)-(16) bearbeitet.
Dabei wird die korrekte Levelnummer vergeben.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
66
Behauptung 3.4.2
Lineare Zeit, Korrektheit“
”
(a) Levelorder-Durchlauf benötigt Zeit
n · tvisit + O(n), wobei tvisit die Zeit für visit angibt.
(b) Der Levelorder-Durchlauf ordnet jedem
Binärbaumknoten v (in v.level) korrekt seine Tiefe zu.
Beweis: Man zeigt durch Induktion über das Level von v:
Jeder innere Knoten v des Binärbaums wird genau einmal
in die Queue eingefügt, genau einmal entnommen und im
Schleifenrumpf (7)-(16) bearbeitet.
Dabei wird die korrekte Levelnummer vergeben.
Weil Queue-Operationen Zeit O(1) benötigen, ist der restliche
Zeitbedarf O(n).
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS16 – Kapitel 3
66
Herunterladen