Wiederholung – Elementare Datenstrukturen

Werbung
Wiederholung – Elementare Datenstrukturen
Definition 11.1: Eine dynamische Menge ist gegeben
durch eine oder mehrer Mengen von Objekten sowie
Operationen auf diesen Mengen und den Objekten der
Mengen. Dynamische Mengen werden auch abstrakte
Datentypen (ADT) genannt.
Definition 11.2:
1. Werden auf einer Menge von Objekten die
Operationen Einfügen, Entfernen und Suchen
betrachtet, so spricht man von einem Wörterbuch.
2. Werden auf einer Menge von Objekten die
Operationen Einfügen, Entfernen und Suchen des
Maximums betrachtet, so spricht man von einer
Warteschlange.
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
1
Wiederholung – Datenstrukturen
Ein grundlegendes Datenbank-Problem
• Speicherung von Datensätzen
Beispiel:
• Kundendaten (Name, Adresse, Wohnort, Kundennummer,
offene Rechnungen, offene Bestellungen,…)
Anforderungen:
• Schneller Zugriff
• Einfügen neuer Datensätze
• Löschen bestehender Datensätze
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
2
Objekte in dynamischen Mengen (1)
Objekte bestehen aus verschiedenen Feldern.
Ein Feld speichert den Schlüssel des Objekts.
Identifikation eines Objekts erfolgt über Schlüssel.
Schlüssel von Objekten sind nicht notwendig
paarweise verschieden.
Falls Schlüssel paarweise verschieden sind, ist Menge
von Objekten identisch zur Menge von Schlüsseln.
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
3
Objekte in dynamischen Mengen (2)
Weitere Felder relevant für Datenstruktur, z.B. Felder
für Referenzen auf andere Objekte.
Andere Felder nur relevant für Anwendung, nicht für
Datenstruktur – die Daten dieser Felder nennt man
Satellitendaten.
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
4
Wiederholung – Datenstrukturen
Zugriff auf Daten:
• Jedes Objekt hat einen Schlüssel
• Eingabe des Schlüssels liefert Datensatz
• Schlüssel sind vergleichbar (es gibt totale Ordnung der
Schlüssel)
Beispiel:
• Kundendaten (Name, Adresse, Kundennummer)
• Schlüssel: Name
• Totale Ordnung: Lexikographische Ordnung
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
5
Datenstrukturen
Zugriff auf Daten:
• Jedes Objekt hat einen Schlüssel
• Eingabe des Schlüssels liefert Datensatz
• Schlüssel sind vergleichbar (es gibt totale Ordnung der
Schlüssel)
Beispiel:
• Kundendaten (Name, Adresse, Kundennummer)
• Schlüssel: Kundennummer
• Totale Ordnung: ‚≤‘
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
6
Datenstrukturen
Datenstruktur Array:
• Platzbedarf Θ(max)
• Laufzeit Suche: Θ(n)
• Laufzeit Einfügen/Löschen: Θ(1)
Vorteile:
• Schnelles Einfügen und Löschen
Nachteile:
• Speicherbedarf abhängig von max (nicht vorhersagbar)
• Hohe Laufzeit für Suche
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
7
Stacks (Stapel) und Queues (Schlangen)
Definition 11.4:
1. Stacks (Stapel) sind eine Datenstruktur, die die
dynamische Menge LIFO (last-in-first-out)
implementiert.
In LIFOs sollen beliebige Objekte eingefügt und das
zuletzt eingefügte Objekt ernfernt werden können.
2. Queues (Schlangen) sind eine Datenstruktur, die die
dynamische Menge FIFO (first-in-first-out)
implementiert.
In FIFOs sollen beliebige Objekte eingefügt und das
am längsten in der Menge befindliche Objekt ernfernt
werden können.
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
8
Doppelt verkettete Listen (1)
Verkettete Listen bestehen aus einer Menge linear
angeordneter Objekte.
Anordnung realisiert durch Verweise.
Unterstützen alle dynamischen Mengen mit den
Operationen Insert, Delete, Search, Search-Minimum,
usw. Unterstützung ist nicht unbedingt effizient.
Objekte in doppelt verketteter Liste L besitzen
mindestens drei Felder: key, next, prev. Außerdem
Felder für Satellitendaten möglich.
Zugriff auf Liste L durch Verweis/Zeiger head[L].
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
Doppelt verkettete Listen (2)
head[L] verweist auf erstes Element der Liste L.
x Objekt in Liste L: next[x] verweist auf nächstes
Element in Liste, prev[L] verweist auf voriges
Element in Liste.
prev[x]=NIL: x besitzt keinen Vorgänger. Dann ist x
erstes Element der Liste und head[L] verweist auf x.
next[x]=NIL: x besitzt keinen Nachfolger. Dann ist x
letztes Element der Liste.
head[L]=NIL: Liste L ist leer.
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
10
Varianten verketteter Listen
Einfach verkettete Listen: Feld prev nicht vorhanden.
Sortierte verkettete Liste: Schlüssel können sortiert
werden. Reihenfolge in Liste entspricht sortierter
Reihenfolge der Schlüssel.
zykisch/kreisförmig verkettete Listen: next des letzten
Objekts zeigt auf erstes Objekt. prev des ersten
Objekts zeigt auf letztes Objekt.
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
11
Doppelt verkettete Listen - Beispiel
Schlüssel
head[L]
/ 9
16
prev
4
1 /
4
1
next
zyklisch doppelt verkette Liste:
head[L]
SS 2009
9
16
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
12
Doppelt verkettete Listen
Datenstruktur Liste:
• Platzbedarf Θ(n)
• Laufzeit Suche: Θ(n)
• Laufzeit Einfügen/Löschen: Θ(1)
Vorteile:
• Schnelles Einfügen/Löschen
• O(n) Speicherbedarf
Nachteile:
• Hohe Laufzeit für Suche
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
13
Vereinfachung durch Sentinels (Wächter)
Vermeidung von Abfragen head[L] ≠ NIL und x ≠ NIL
durch Einfügen eines zusätzlichen Objekts nil[L].
nil[L] besitzt drei Felder key, prev, next, aber
key[nil[L]]= NIL.
next[nil[L]] verweist auf erstes (richtiges) Objekt in Liste.
prev[nil[L]] verweist auf letztes Objekt in Liste.
Ersetzten in Pseudocode NIL durch nil[L].
head[L] nicht mehr benötigt, ersetzt durch next[nil[L]].
Objekt zur Vereinfachung von Randbedingungen wird
Sentinel oder Wächter genannt.
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
14
Zyklisch verkette Listen mit Sentinel
nil [L]
nil [L]
/ 9
16
4
nil [L]
/ 25
9
16
4
nil [L]
/ 25
9
16
1
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
1
15
Doppelt verkettete Listen - Beispiel
Drei grundlegende Datenstrukturen
• Array
• Stack/Queue
• (doppelt) verkettete Liste
Diskussion
• Alle drei Strukturen haben gewichtige Nachteile
• Suche: Θ(n)
• Zeiger/Referenzen helfen beim Speichermanagement
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
16
Binäre Bäume
Neben Felder für Schlüssel und Satellitendaten
Felder p, lc, rc.
x Knoten: p[x] Verweis auf Elternknoten, lc[x] Verweis
auf linkes Kind, rc[x] Verweis auf rechtes Kind.
Falls p[x]=NIL, dann ist x Wurzel des Baums.
lc[x] / rc[x]=NIL: kein linkes/rechtes Kind.
Zugriff auf Baum T durch Verweis root[T] auf Wurzelknoten.
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
17
Binäre Bäume - Illustration
root[T]
/
/
/
/
/
/
/
/
/
/
SS 2009
/
/
/
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
18
Allgemeine Bäume
Darstellung für binäre Bäume auch möglich für k-näre
Bäume, k fest.
Ersetze lc[x]/rc[x] durch child1[x],..,childk[x].
Bei Bäumen mit unbeschränktem Grad nicht möglich,
oder ineffizient, da Speicher für viele Felder reserviert
werden muss.
Nutzen linkes-Kind/rechtes-Geschwister- Darstellung.
Feld p für Eltern bleibt. Dann Feld left-child für linkes
Kind und Feld right-sibling für rechtes Geschwister.
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
19
Allgemeine Bäume
root[T]
/
/
/
/
SS 2009
/
/
/
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
/
/
/
20
Binäre Suchbäume
Binäre Suchbäume
• Verwende Binärbaum
• Speichere Schlüssel „geordnet“
Binäre Suchbaumeigenschaft:
• Sei x Knoten im binären Suchbaum
• Ist y Knoten im linken Unterbaum von x, dann gilt
key[y]≤key[x]
• Ist y Knoten im rechten Unterbaum von x, dann gilt
key[y]≥key[x]
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
21
Binäre Suchbäume
Unterschiedliche Suchbäume
• Schlüsselmenge 4,6,7
• Wir erlauben mehrfache Vorkommen desselben
Schlüssels
4
6
4
7
6
7
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
22
Binäre Suchbäume
Ausgabe aller Schlüssel
• Gegeben binärer Suchbaum
• Wie kann man alle Schlüssel aufsteigend sortiert in Θ(n)
Zeit ausgeben?
6
7
4
3
SS 2009
7
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
23
Binäre Suchbäume
Inorder-Tree-Walk(x)
1. if x≠nil then
2. Inorder-Tree-Walk(lc[x])
3. Ausgabe key[x]
4. Inorder-Tree-Walk(rc[x])
6
7
4
3
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
7
9
24
Binäre Suchbäume
Aufruf über
Inorder-Tree-Walk(x)
Inorder-Tree-Walk(root[T])
1. if x≠nil then
2. Inorder-Tree-Walk(lc[x])
3. Ausgabe key[x]
6
4. Inorder-Tree-Walk(rc[x])
7
4
3
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
7
9
25
Binäre Suchbäume
Inorder-Tree-Walk(x)
1. if x≠nil then
2. Inorder-Tree-Walk(lc[x])
3. Ausgabe key[x]
4. Inorder-Tree-Walk(rc[x])
6
7
4
3
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
7
9
26
Binäre Suchbäume
Inorder-Tree-Walk(x)
1. if x≠nil then
2. Inorder-Tree-Walk(lc[x])
3. Ausgabe key[x]
4. Inorder-Tree-Walk(rc[x])
6
7
4
3
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
7
9
27
Binäre Suchbäume
Inorder-Tree-Walk(x)
1. if x≠nil then
2. Inorder-Tree-Walk(lc[x])
3. Ausgabe key[x]
4. Inorder-Tree-Walk(rc[x])
6
7
4
3
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
7
9
28
Binäre Suchbäume
Inorder-Tree-Walk(x)
1. if x≠nil then
2. Inorder-Tree-Walk(lc[x])
3. Ausgabe key[x]
4. Inorder-Tree-Walk(rc[x])
6
7
4
3
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
7
9
29
Binäre Suchbäume
Inorder-Tree-Walk(x)
1. if x≠nil then
2. Inorder-Tree-Walk(lc[x])
3. Ausgabe key[x]
4. Inorder-Tree-Walk(rc[x])
6
7
4
3
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
7
9
30
Binäre Suchbäume
Inorder-Tree-Walk(x)
1. if x≠nil then
2. Inorder-Tree-Walk(lc[x])
3. Ausgabe key[x]
Kein linkes Kind
4. Inorder-Tree-Walk(rc[x])
vorhanden, d.h.
lc[x]=nil
6
7
4
x 3
7
9
nil
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
31
Binäre Suchbäume
Inorder-Tree-Walk(x)
1. if x≠nil then
2. Inorder-Tree-Walk(lc[x])
3. Ausgabe key[x]
Kein linkes Kind
4. Inorder-Tree-Walk(rc[x])
vorhanden, d.h.
lc[x]=nil
6
7
4
x 3
7
9
nil
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
32
Binäre Suchbäume
Ausgabe:
3
Inorder-Tree-Walk(x)
1. if x≠nil then
2. Inorder-Tree-Walk(lc[x])
3. Ausgabe key[x]
4. Inorder-Tree-Walk(rc[x])
6
7
4
3
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
7
9
33
Binäre Suchbäume
Inorder-Tree-Walk(x)
1. if x≠nil then
2. Inorder-Tree-Walk(lc[x])
3. Ausgabe key[x]
Kein rechtes Kind
4. Inorder-Tree-Walk(rc[x])
vorhanden, d.h.
4
rc[x]=nil
Ausgabe:
3
6
3
7
7
9
nil
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
34
Binäre Suchbäume
Inorder-Tree-Walk(x)
1. if x≠nil then
2. Inorder-Tree-Walk(lc[x])
3. Ausgabe key[x]
Kein rechtes Kind
4. Inorder-Tree-Walk(rc[x])
vorhanden, d.h.
4
rc[x]=nil
Ausgabe:
3
6
3
7
7
9
nil
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
35
Binäre Suchbäume
Inorder-Tree-Walk(x)
1. if x≠nil then
2. Inorder-Tree-Walk(lc[x])
3. Ausgabe key[x]
4. Inorder-Tree-Walk(rc[x])
Knoten
4
abgearbeitet
Ausgabe:
3
6
3
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
7
7
9
36
Binäre Suchbäume
Ausgabe:
3, 4
Inorder-Tree-Walk(x)
1. if x≠nil then
2. Inorder-Tree-Walk(lc[x])
3. Ausgabe key[x]
4. Inorder-Tree-Walk(rc[x])
6
7
4
3
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
7
9
37
Binäre Suchbäume
Ausgabe:
3, 4
Inorder-Tree-Walk(x)
1. if x≠nil then
2. Inorder-Tree-Walk(lc[x])
3. Ausgabe key[x]
4. Inorder-Tree-Walk(rc[x])
6
7
4
3
SS 2009
nil
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
7
9
38
Binäre Suchbäume
Ausgabe:
3, 4
Inorder-Tree-Walk(x)
1. if x≠nil then
2. Inorder-Tree-Walk(lc[x])
3. Ausgabe key[x]
4. Inorder-Tree-Walk(rc[x])
6
7
4
3
SS 2009
nil
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
7
9
39
Binäre Suchbäume
Ausgabe:
3, 4
Inorder-Tree-Walk(x)
1. if x≠nil then
2. Inorder-Tree-Walk(lc[x])
3. Ausgabe key[x]
4. Inorder-Tree-Walk(rc[x])
6
7
4
3
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
7
9
40
Binäre Suchbäume
Ausgabe:
3, 4, 6
Inorder-Tree-Walk(x)
1. if x≠nil then
2. Inorder-Tree-Walk(lc[x])
3. Ausgabe key[x]
4. Inorder-Tree-Walk(rc[x])
6
7
4
3
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
7
9
41
Binäre Suchbäume
Ausgabe:
3, 4, 6
Inorder-Tree-Walk(x)
1. if x≠nil then
2. Inorder-Tree-Walk(lc[x])
3. Ausgabe key[x]
4. Inorder-Tree-Walk(rc[x])
6
7
4
3
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
7
9
42
Binäre Suchbäume
Ausgabe:
3, 4, 6
Inorder-Tree-Walk(x)
1. if x≠nil then
2. Inorder-Tree-Walk(lc[x])
3. Ausgabe key[x]
4. Inorder-Tree-Walk(rc[x])
6
7
4
3
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
7
9
43
Binäre Suchbäume
Ausgabe:
3, 4, 6
Inorder-Tree-Walk(x)
1. if x≠nil then
2. Inorder-Tree-Walk(lc[x])
3. Ausgabe key[x]
4. Inorder-Tree-Walk(rc[x])
6
7
4
3
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
7
9
44
Binäre Suchbäume
Ausgabe:
3, 4, 6
Inorder-Tree-Walk(x)
1. if x≠nil then
2. Inorder-Tree-Walk(lc[x])
3. Ausgabe key[x]
4. Inorder-Tree-Walk(rc[x])
6
7
4
3
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
7
9
45
Binäre Suchbäume
Ausgabe:
3, 4, 6
Inorder-Tree-Walk(x)
1. if x≠nil then
2. Inorder-Tree-Walk(lc[x])
3. Ausgabe key[x]
4. Inorder-Tree-Walk(rc[x])
6
7
4
3
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
7
9
46
Binäre Suchbäume
Ausgabe:
3, 4, 6
Inorder-Tree-Walk(x)
1. if x≠nil then
2. Inorder-Tree-Walk(lc[x])
3. Ausgabe key[x]
4. Inorder-Tree-Walk(rc[x])
6
7
4
3
7
9
nil
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
47
Binäre Suchbäume
Ausgabe:
3, 4, 6, 7
Inorder-Tree-Walk(x)
1. if x≠nil then
2. Inorder-Tree-Walk(lc[x])
3. Ausgabe key[x]
4. Inorder-Tree-Walk(rc[x])
6
7
4
3
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
7
9
48
Binäre Suchbäume
Ausgabe:
3, 4, 6, 7
Inorder-Tree-Walk(x)
1. if x≠nil then
2. Inorder-Tree-Walk(lc[x])
3. Ausgabe key[x]
4. Inorder-Tree-Walk(rc[x])
6
7
4
3
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
7
9
49
Binäre Suchbäume
Ausgabe:
3, 4, 6
Inorder-Tree-Walk(x)
1. if x≠nil then
2. Inorder-Tree-Walk(lc[x])
3. Ausgabe key[x]
4. Inorder-Tree-Walk(rc[x])
6
7
4
3
9
7
nil
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
50
Binäre Suchbäume
Ausgabe:
3, 4, 6, 7
Inorder-Tree-Walk(x)
1. if x≠nil then
2. Inorder-Tree-Walk(lc[x])
3. Ausgabe key[x]
4. Inorder-Tree-Walk(rc[x])
6
7
4
3
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
7
9
51
Binäre Suchbäume
Ausgabe:
3, 4, 6, 7, 7
Inorder-Tree-Walk(x)
1. if x≠nil then
2. Inorder-Tree-Walk(lc[x])
3. Ausgabe key[x]
4. Inorder-Tree-Walk(rc[x])
6
7
4
3
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
7
9
52
Binäre Suchbäume
Ausgabe:
3, 4, 6, 7, 7
Inorder-Tree-Walk(x)
1. if x≠nil then
2. Inorder-Tree-Walk(lc[x])
3. Ausgabe key[x]
4. Inorder-Tree-Walk(rc[x])
6
7
4
3
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
7
9
53
Binäre Suchbäume
Ausgabe:
3, 4, 6, 7, 7
Inorder-Tree-Walk(x)
1. if x≠nil then
2. Inorder-Tree-Walk(lc[x])
3. Ausgabe key[x]
4. Inorder-Tree-Walk(rc[x])
6
7
4
3
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
7
9
54
Binäre Suchbäume
Ausgabe:
3, 4, 6, 7, 7
Inorder-Tree-Walk(x)
1. if x≠nil then
2. Inorder-Tree-Walk(lc[x])
3. Ausgabe key[x]
4. Inorder-Tree-Walk(rc[x])
6
7
4
3
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
7
9
55
Binäre Suchbäume
Ausgabe:
3, 4, 6, 7, 7
Inorder-Tree-Walk(x)
1. if x≠nil then
2. Inorder-Tree-Walk(lc[x])
3. Ausgabe key[x]
4. Inorder-Tree-Walk(rc[x])
6
7
4
3
9
7
nil
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
56
Binäre Suchbäume
Ausgabe:
3, 4, 6, 7, 7
Inorder-Tree-Walk(x)
1. if x≠nil then
2. Inorder-Tree-Walk(lc[x])
3. Ausgabe key[x]
4. Inorder-Tree-Walk(rc[x])
6
7
4
3
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
7
9
57
Binäre Suchbäume
Ausgabe:
3, 4, 6, 7, 7, 9
Inorder-Tree-Walk(x)
1. if x≠nil then
2. Inorder-Tree-Walk(lc[x])
3. Ausgabe key[x]
4. Inorder-Tree-Walk(rc[x])
6
7
4
3
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
7
9
58
Binäre Suchbäume
Ausgabe:
3, 4, 6, 7, 7, 9
Inorder-Tree-Walk(x)
1. if x≠nil then
2. Inorder-Tree-Walk(lc[x])
3. Ausgabe key[x]
4. Inorder-Tree-Walk(rc[x])
6
7
4
3
7
9
nil
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
59
Binäre Suchbäume
Ausgabe:
3, 4, 6, 7, 7, 9
Inorder-Tree-Walk(x)
1. if x≠nil then
2. Inorder-Tree-Walk(lc[x])
3. Ausgabe key[x]
4. Inorder-Tree-Walk(rc[x])
6
7
4
3
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
7
9
60
Binäre Suchbäume
Ausgabe:
3, 4, 6, 7, 7, 9
Inorder-Tree-Walk(x)
1. if x≠nil then
2. Inorder-Tree-Walk(lc[x])
3. Ausgabe key[x]
4. Inorder-Tree-Walk(rc[x])
6
7
4
3
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
7
9
61
Binäre Suchbäume
Ausgabe:
3, 4, 6, 7, 7, 9
Inorder-Tree-Walk(x)
1. if x≠nil then
2. Inorder-Tree-Walk(lc[x])
3. Ausgabe key[x]
4. Inorder-Tree-Walk(rc[x])
6
7
4
3
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
7
9
62
Binäre Suchbäume
Ausgabe:
3, 4, 6, 7, 7, 9
Inorder-Tree-Walk(x)
1. if x≠nil then
2. Inorder-Tree-Walk(lc[x])
3. Ausgabe key[x]
4. Inorder-Tree-Walk(rc[x])
6
7
4
3
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
7
9
63
Binäre Suchbäume
Inorder-Tree-Walk(x)
1. if x≠nil then
2. Inorder-Tree-Walk(lc[x])
3. Ausgabe key[x]
4. Inorder-Tree-Walk(rc[x])
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
Laufzeit Θ(n)
64
Binäre Suchbäume
Suchen in Binärbäumen
• Gegeben ist Schlüssel k
• Gesucht ist ein Knoten mit Schlüssel k
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
65
Binäre Suchbäume
Baumsuche(x,k)
1. if x=nil or k=key[x] then return x
2. if k<key[x] then return Baumsuche(lc[x],k)
3. else return Baumsuche(rc[x],k)
6
7
4
3
SS 2009
7
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
66
Binäre Suchbäume
Aufruf mit
Baumsuche(x,k)
x=root[T]
1. if x=nil or k=key[x] then return x
2. if k<key[x] then return Baumsuche(lc[x],k)
3. else return Baumsuche(rc[x],k)
Baumsuche(root[T],9)
6
7
4
3
SS 2009
7
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
67
Binäre Suchbäume
Baumsuche(x,k)
1. if x=nil or k=key[x] then return x
2. if k<key[x] then return Baumsuche(lc[x],k)
3. else return Baumsuche(rc[x],k)
Baumsuche(root[T],9)
6
7
4
3
SS 2009
7
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
68
Binäre Suchbäume
Baumsuche(x,k)
1. if x=nil or k=key[x] then return x
2. if k<key[x] then return Baumsuche(lc[x],k)
3. else return Baumsuche(rc[x],k)
Baumsuche(root[T],9)
6
7
4
3
SS 2009
7
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
69
Binäre Suchbäume
Baumsuche(x,k)
1. if x=nil or k=key[x] then return x
2. if k<key[x] then return Baumsuche(lc[x],k)
3. else return Baumsuche(rc[x],k)
Baumsuche(root[T],9)
6
7
4
3
SS 2009
7
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
70
Binäre Suchbäume
Baumsuche(x,k)
1. if x=nil or k=key[x] then return x
2. if k<key[x] then return Baumsuche(lc[x],k)
3. else return Baumsuche(rc[x],k)
Baumsuche(root[T],9)
6
7
4
3
SS 2009
7
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
71
Binäre Suchbäume
Baumsuche(x,k)
1. if x=nil or k=key[x] then return x
2. if k<key[x] then return Baumsuche(lc[x],k)
3. else return Baumsuche(rc[x],k)
Baumsuche(root[T],9)
6
7
4
3
SS 2009
7
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
72
Binäre Suchbäume
Baumsuche(x,k)
1. if x=nil or k=key[x] then return x
2. if k<key[x] then return Baumsuche(lc[x],k)
3. else return Baumsuche(rc[x],k)
Baumsuche(root[T],9)
6
7
4
3
SS 2009
7
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
73
Binäre Suchbäume
Baumsuche(x,k)
1. if x=nil or k=key[x] then return x
2. if k<key[x] then return Baumsuche(lc[x],k)
3. else return Baumsuche(rc[x],k)
Baumsuche(root[T],9)
6
7
4
3
SS 2009
7
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
74
Binäre Suchbäume
Baumsuche(x,k)
1. if x=nil or k=key[x] then return x
2. if k<key[x] then return Baumsuche(lc[x],k)
3. else return Baumsuche(rc[x],k)
Baumsuche(root[T],9)
6
Ausgabe: 9
7
4
3
SS 2009
7
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
75
Binäre Suchbäume
Baumsuche(x,k)
1. if x=nil or k=key[x] then return x
2. if k<key[x] then return Baumsuche(lc[x],k)
3. else return Baumsuche(rc[x],k)
6
7
4
Höhe h
3
SS 2009
Laufzeit: O(h)
7
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
76
Binäre Suchbäume
Weitere Operationen in Binärbäumen
• Minimum/Maximumsuche
• Nachforlger/Vorgänger
Minimum- und Maximumsuche:
• Suchbaumeigenschaft:
Alle Knoten im rechten Unterbaum eines Knotens x sind
größer gleich key[x]
• Alle Knoten im linken Unterbaum von x sind ≤ key[x]
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
77
Binäre Suchbäume
MinimumSuche(x)
1. while lc[x]≠nil do x ← lc[x]
2. return x
6
7
4
3
SS 2009
7
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
78
Binäre Suchbäume
MinimumSuche(x)
1. while lc[x]≠nil do x ← lc[x]
2. return x
x
6
7
4
3
SS 2009
7
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
79
Binäre Suchbäume
MinimumSuche(x)
1. while lc[x]≠nil do x ← lc[x]
2. return x
6
x
3
SS 2009
7
4
7
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
80
Binäre Suchbäume
MinimumSuche(x)
1. while lc[x]≠nil do x ← lc[x]
2. return x
6
7
4
x 3
SS 2009
7
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
81
Binäre Suchbäume
MinimumSuche(x)
1. while lc[x]≠nil do x ← lc[x]
2. return x
Laufzeit O(h)
6
7
4
x 3
SS 2009
7
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
82
Binäre Suchbäume
MaximumSuche(x)
1. while rc[x]≠nil do x ← rc[x]
2. return x
6
7
4
x 3
SS 2009
7
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
83
Binäre Suchbäume
MaximumSuche(x)
1. while rc[x]≠nil do x ← rc[x]
2. return x
6
7
4
x 3
SS 2009
7
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
84
Binäre Suchbäume
MaximumSuche(x)
1. while rc[x]≠nil do x ← rc[x]
2. return x
6
7
4
x 3
SS 2009
7
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
85
Binäre Suchbäume
MaximumSuche(x)
1. while rc[x]≠nil do x ← rc[x]
2. return x
6
7
4
x 3
SS 2009
7
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
86
Binäre Suchbäume
MaximumSuche(x)
1. while rc[x]≠nil do x ← rc[x]
2. return x
6
7
4
x 3
SS 2009
7
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
87
Binäre Suchbäume
MaximumSuche(x)
1. while rc[x]≠nil do x ← rc[x]
2. return x
Laufzeit O(h)
6
7
4
x 3
SS 2009
7
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
88
Binäre Suchbäume
MaximumSuche(x)
1. while rc[x]≠nil do x ← rc[x]
2. return x
Laufzeit O(h)
6
7
4
x 3
SS 2009
7
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
89
Binäre Suchbäume
Nachfolgersuche:
• Nachfolger bzgl. Inorder-Tree-Walk
• Wenn alle Schlüssel unterschiedlich, dann ist das der
nächstgrößere Schlüssel
6
7
4
3
SS 2009
7
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
90
Binäre Suchbäume
Nachfolgersuche:
• Fall 1 (rechter Unterbaum von x nicht leer):
Dann ist der linkeste Knoten im rechten Unterbaum der
Nachfolger von x
6
7
4
3
SS 2009
7
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
91
Binäre Suchbäume
Nachfolgersuche:
• Fall 1 (rechter Unterbaum von x nicht leer):
Dann ist der linkeste Knoten im rechten Unterbaum der
Nachfolger von x
6
7
4
3
SS 2009
7
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
92
Binäre Suchbäume
Nachfolgersuche:
• Fall 1 (rechter Unterbaum von x nicht leer):
Dann ist der linkeste Knoten im rechten Unterbaum der
Nachfolger von x
6
7
4
3
SS 2009
7
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
93
Binäre Suchbäume
Nachfolgersuche:
• Fall 2 (rechter Unterbaum von x leer und x hat Nachfolger y):
Dann ist y der niedrigste Vorgänger von x, dessen linkes
Kind ebenfalls Vorgänger von x ist
6
7
4
3
SS 2009
5
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
94
Binäre Suchbäume
Nachfolgersuche:
• Fall 2 (rechter Unterbaum von x leer und x hat Nachfolger y):
Dann ist y der niedrigste Vorgänger von x, dessen linkes
Kind ebenfalls Vorgänger von x ist
6
7
4
3
SS 2009
5
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
95
Binäre Suchbäume
Nachfolgersuche:
• Fall 2 (rechter Unterbaum von x leer und x hat Nachfolger y):
Dann ist y der niedrigste Vorgänger von x, dessen linkes
Kind ebenfalls Vorgänger von x ist
6
7
4
3
SS 2009
5
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
96
Binäre Suchbäume
Nachfolgersuche(x)
1. if rc[x] ≠ nil then return MinimumSuche(rc[x])
2. y ← p[x]
3. while y ≠ nil and x=rc[y] do
4. x ← y
6
5. y ← p[y]
6. return y
7
4
3
SS 2009
5
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
97
Binäre Suchbäume
Nachfolgersuche(x)
1. if rc[x] ≠ nil then return MinimumSuche(rc[x])
2. y ← p[x]
3. while y ≠ nil and x=rc[y] do
4. x ← y
Nachfolgersuche(6)
6
5. y ← p[y]
6. return y
7
4
3
SS 2009
5
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
98
Binäre Suchbäume
Nachfolgersuche(x)
1. if rc[x] ≠ nil then return MinimumSuche(rc[x])
2. y ← p[x]
3. while y ≠ nil and x=rc[y] do
4. x ← y
Nachfolgersuche(6)
6
5. y ← p[y]
6. return y
7
4
3
SS 2009
5
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
99
Binäre Suchbäume
Nachfolgersuche(x)
1. if rc[x] ≠ nil then return MinimumSuche(rc[x])
2. y ← p[x]
3. while y ≠ nil and x=rc[y] do
4. x ← y
Nachfolgersuche(6)
6
5. y ← p[y]
6. return y
7
4
3
SS 2009
5
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
100
Binäre Suchbäume
Nachfolgersuche(x)
1. if rc[x] ≠ nil then return MinimumSuche(rc[x])
2. y ← p[x]
3. while y ≠ nil and x=rc[y] do
4. x ← y
Nachfolgersuche(5)
6
5. y ← p[y]
6. return y
7
4
3
SS 2009
5
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
101
Binäre Suchbäume
Nachfolgersuche(x)
1. if rc[x] ≠ nil then return MinimumSuche(rc[x])
2. y ← p[x]
3. while y ≠ nil and x=rc[y] do
4. x ← y
Nachfolgersuche(5)
6
5. y ← p[y]
6. return y
7
4
3
SS 2009
5
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
102
Binäre Suchbäume
Nachfolgersuche(x)
1. if rc[x] ≠ nil then return MinimumSuche(rc[x])
2. y ← p[x]
3. while y ≠ nil and x=rc[y] do
4. x ← y
Nachfolgersuche(5)
6
5. y ← p[y]
6. return y
y 4
7
3
SS 2009
5
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
103
Binäre Suchbäume
Nachfolgersuche(x)
1. if rc[x] ≠ nil then return MinimumSuche(rc[x])
2. y ← p[x]
3. while y ≠ nil and x=rc[y] do
4. x ← y
Nachfolgersuche(5)
6
5. y ← p[y]
6. return y
y 4
7
3
SS 2009
5 x
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
104
Binäre Suchbäume
Nachfolgersuche(x)
1. if rc[x] ≠ nil then return MinimumSuche(rc[x])
2. y ← p[x]
3. while y ≠ nil and x=rc[y] do
4. x ← y
Nachfolgersuche(5)
6
5. y ← p[y]
6. return y
y 4 x
7
3
SS 2009
5
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
105
Binäre Suchbäume
Nachfolgersuche(x)
1. if rc[x] ≠ nil then return MinimumSuche(rc[x])
2. y ← p[x]
3. while y ≠ nil and x=rc[y] do
4. x ← y
Nachfolgersuche(5)
y 6
5. y ← p[y]
6. return y
7
4 x
3
SS 2009
5
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
106
Binäre Suchbäume
Nachfolgersuche(x)
1. if rc[x] ≠ nil then return MinimumSuche(rc[x])
2. y ← p[x]
3. while y ≠ nil and x=rc[y] do
4. x ← y
Nachfolgersuche(5)
y 6
5. y ← p[y]
6. return y
7
4 x
3
SS 2009
5
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
107
Binäre Suchbäume
Nachfolgersuche(x)
1. if rc[x] ≠ nil then return MinimumSuche(rc[x])
2. y ← p[x]
3. while y ≠ nil and x=rc[y] do
4. x ← y
Nachfolgersuche(5)
y 6
5. y ← p[y]
6. return y
7
4
3
SS 2009
5
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
108
Binäre Suchbäume
Nachfolgersuche(x)
1. if rc[x] ≠ nil then return MinimumSuche(rc[x])
2. y ← p[x]
Laufzeit O(h)
3. while y ≠ nil and x=rc[y] do
4. x ← y
6
5. y ← p[y]
6. return y
7
4
3
SS 2009
5
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
109
Binäre Suchbäume
Vorgängersuche:
• Symmetrisch zu Nachfolgersuche
• Daher ebenfall O(h) Laufzeit
6
7
4
3
SS 2009
5
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
110
Binäre Suchbäume
Binäre Suchbäume:
• Aufzähler der Elemente mit Inorder-Tree-Walk in O(n) Zeit
• Such in O(h) Zeit
• Minimum/Maximum in O(h) Zeit
Dynamische Operationen?
• Einfügen und Löschen
• Müssen Suchbaumeigenschaft aufrecht erhalten
• Auswirkung auf Höhe des Baums?
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
111
Binäre Suchbäume
Einfügen:
• Ähnlich wie Baumsuche: Finde Blatt, an das neuer Knoten
angehängt wird
• Danach wird nil-Zeiger durch neues
6
Element ersetzt
7
4
3
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
5
9
112
Binäre Suchbäume
Einfügen(T,z)
1. y← nil; x ← root[T]
2. while x≠nil do
3. y ← x
4. if key[z] < key[x] then x ← lc[x]
5. else x ← rc[x]
6. p[z] ← y
7. if y=nil then root[T] ← z
8. else
9. if key[z]< key[y] then lc[y] ← z
10. else rc[y] ← z
SS 2009
6
7
4
3
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
5
9
113
Binäre Suchbäume
Einfügen(T,z)
y ist Vater des
1. y← nil; x ← root[T]
Einfügen(8)
einzufügenden
2. while x≠nil do
Elements
3. y ← x
x 6
4. if key[z] < key[x] then x ← lc[x]
5. else x ← rc[x]
7
6. p[z] ← y
4
7. if y=nil then root[T] ← z
8. else
3
5
9
9. if key[z]< key[y] then lc[y] ← z
10. else rc[y] ← z
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
114
Binäre Suchbäume
Einfügen(T,z)
1. y← nil; x ← root[T]
2. while x≠nil do
3. y ← x
4. if key[z] < key[x] then x ← lc[x]
5. else x ← rc[x]
6. p[z] ← y
7. if y=nil then root[T] ← z
8. else
9. if key[z]< key[y] then lc[y] ← z
10. else rc[y] ← z
SS 2009
Einfügen(8)
x
6
7
4
3
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
5
9
115
Binäre Suchbäume
Einfügen(T,z)
1. y← nil; x ← root[T]
2. while x≠nil do
3. y ← x
4. if key[z] < key[x] then x ← lc[x]
5. else x ← rc[x]
6. p[z] ← y
7. if y=nil then root[T] ← z
8. else
9. if key[z]< key[y] then lc[y] ← z
10. else rc[y] ← z
SS 2009
Einfügen(8)
x
6
7
4
3
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
y
5
9
116
Binäre Suchbäume
Einfügen(T,z)
1. y← nil; x ← root[T]
2. while x≠nil do
3. y ← x
4. if key[z] < key[x] then x ← lc[x]
5. else x ← rc[x]
6. p[z] ← y
7. if y=nil then root[T] ← z
8. else
9. if key[z]< key[y] then lc[y] ← z
10. else rc[y] ← z
SS 2009
Einfügen(8)
x
6
7
4
3
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
y
5
9
117
Binäre Suchbäume
Einfügen(T,z)
1. y← nil; x ← root[T]
2. while x≠nil do
3. y ← x
4. if key[z] < key[x] then x ← lc[x]
5. else x ← rc[x]
6. p[z] ← y
7. if y=nil then root[T] ← z
8. else
9. if key[z]< key[y] then lc[y] ← z
10. else rc[y] ← z
SS 2009
Einfügen(8)
6
x 7
4
3
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
y
5
9
118
Binäre Suchbäume
Einfügen(T,z)
1. y← nil; x ← root[T]
2. while x≠nil do
3. y ← x
4. if key[z] < key[x] then x ← lc[x]
5. else x ← rc[x]
6. p[z] ← y
7. if y=nil then root[T] ← z
8. else
9. if key[z]< key[y] then lc[y] ← z
10. else rc[y] ← z
SS 2009
Einfügen(8)
6
x 7
4
3
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
y
5
9
119
Binäre Suchbäume
Einfügen(T,z)
1. y← nil; x ← root[T]
2. while x≠nil do
3. y ← x
4. if key[z] < key[x] then x ← lc[x]
5. else x ← rc[x]
6. p[z] ← y
7. if y=nil then root[T] ← z
8. else
9. if key[z]< key[y] then lc[y] ← z
10. else rc[y] ← z
SS 2009
Einfügen(8)
6
x 7 y
4
3
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
5
9
120
Binäre Suchbäume
Einfügen(T,z)
1. y← nil; x ← root[T]
2. while x≠nil do
3. y ← x
4. if key[z] < key[x] then x ← lc[x]
5. else x ← rc[x]
6. p[z] ← y
7. if y=nil then root[T] ← z
8. else
9. if key[z]< key[y] then lc[y] ← z
10. else rc[y] ← z
SS 2009
Einfügen(8)
6
x 7 y
4
3
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
5
9
121
Binäre Suchbäume
Einfügen(T,z)
1. y← nil; x ← root[T]
2. while x≠nil do
3. y ← x
4. if key[z] < key[x] then x ← lc[x]
5. else x ← rc[x]
6. p[z] ← y
7. if y=nil then root[T] ← z
8. else
9. if key[z]< key[y] then lc[y] ← z
10. else rc[y] ← z
SS 2009
Einfügen(8)
6
7 y
4
3
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
5
x 9
122
Binäre Suchbäume
Einfügen(T,z)
1. y← nil; x ← root[T]
2. while x≠nil do
3. y ← x
4. if key[z] < key[x] then x ← lc[x]
5. else x ← rc[x]
6. p[z] ← y
7. if y=nil then root[T] ← z
8. else
9. if key[z]< key[y] then lc[y] ← z
10. else rc[y] ← z
SS 2009
Einfügen(8)
6
7 y
4
3
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
5
x 9
123
Binäre Suchbäume
Einfügen(T,z)
1. y← nil; x ← root[T]
2. while x≠nil do
3. y ← x
4. if key[z] < key[x] then x ← lc[x]
5. else x ← rc[x]
6. p[z] ← y
7. if y=nil then root[T] ← z
8. else
9. if key[z]< key[y] then lc[y] ← z
10. else rc[y] ← z
SS 2009
Einfügen(8)
6
7
4
3
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
5
x 9
y
124
Binäre Suchbäume
Einfügen(T,z)
1. y← nil; x ← root[T]
2. while x≠nil do
3. y ← x
4. if key[z] < key[x] then x ← lc[x]
5. else x ← rc[x]
6. p[z] ← y
7. if y=nil then root[T] ← z
8. else
9. if key[z]< key[y] then lc[y] ← z
10. else rc[y] ← z
SS 2009
Einfügen(8)
6
7
4
3
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
5
9
y
x nil
125
Binäre Suchbäume
Einfügen(T,z)
1. y← nil; x ← root[T]
2. while x≠nil do
3. y ← x
4. if key[z] < key[x] then x ← lc[x]
5. else x ← rc[x]
6. p[z] ← y
7. if y=nil then root[T] ← z
8. else
9. if key[z]< key[y] then lc[y] ← z
10. else rc[y] ← z
SS 2009
Einfügen(8)
6
7
4
3
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
5
9
y
x nil
126
Binäre Suchbäume
Einfügen(T,z)
1. y← nil; x ← root[T]
2. while x≠nil do
3. y ← x
4. if key[z] < key[x] then x ← lc[x]
5. else x ← rc[x]
6. p[z] ← y
7. if y=nil then root[T] ← z
8. else
9. if key[z]< key[y] then lc[y] ← z
10. else rc[y] ← z
SS 2009
Einfügen(8)
6
7
4
3
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
5
9
y
x nil
127
Binäre Suchbäume
Einfügen(T,z)
1. y← nil; x ← root[T]
2. while x≠nil do
3. y ← x
4. if key[z] < key[x] then x ← lc[x]
5. else x ← rc[x]
6. p[z] ← y
7. if y=nil then root[T] ← z
8. else
9. if key[z]< key[y] then lc[y] ← z
10. else rc[y] ← z
SS 2009
Einfügen(8)
6
7
4
3
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
5
9
y
x nil
128
Binäre Suchbäume
Einfügen(T,z)
1. y← nil; x ← root[T]
2. while x≠nil do
3. y ← x
4. if key[z] < key[x] then x ← lc[x]
5. else x ← rc[x]
6. p[z] ← y
7. if y=nil then root[T] ← z
8. else
9. if key[z]< key[y] then lc[y] ← z
10. else rc[y] ← z
SS 2009
Einfügen(8)
6
7
4
3
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
5
9
y
x 8
129
Binäre Suchbäume
Einfügen(T,z)
1. y← nil; x ← root[T]
2. while x≠nil do
3. y ← x
4. if key[z] < key[x] then x ← lc[x]
5. else x ← rc[x]
6. p[z] ← y
7. if y=nil then root[T] ← z
8. else
9. if key[z]< key[y] then lc[y] ← z
10. else rc[y] ← z
SS 2009
Einfügen(8)
6
7
4
3
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
5
9
y
x 8
130
Binäre Suchbäume
Einfügen(T,z)
1. y← nil; x ← root[T]
2. while x≠nil do
3. y ← x
4. if key[z] < key[x] then x ← lc[x]
5. else x ← rc[x]
6. p[z] ← y
7. if y=nil then root[T] ← z
8. else
9. if key[z]< key[y] then lc[y] ← z
10. else rc[y] ← z
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
Einfügen(8)
Laufzeit:
O(h)
131
Binäre Suchbäume
Löschen:
•
•
•
•
3 unterschiedliche Fälle
(a) zu löschendes Element z hat keine Kinder
(b) zu löschendes Element z hat ein Kind
(c) zu löschendes Element z hat zwei Kinder
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
132
Binäre Suchbäume
Fall (a):
•
zu löschendes Element z hat keine Kinder
6
7
4
3
5
SS 2009
9
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
133
Binäre Suchbäume
Fall (a):
• zu löschendes Element z hat keine Kinder
• Entferne Element
6
7
4
3
5
SS 2009
6
4
9
3
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
7
9
134
Binäre Suchbäume
Fall (b):
•
zu löschendes Element z hat ein Kind
6
7
4
3
5
SS 2009
9
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
135
Binäre Suchbäume
Fall (b):
• zu löschendes Element z hat ein Kind
• Hänge der Unterbaum von z an den Vater von z
6
7
4
3
5
SS 2009
6
9
4
9
3
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
5
136
Binäre Suchbäume
Fall (c):
•
zu löschendes Element z hat zwei Kinder
6
7
4
3
5
SS 2009
9
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
137
Binäre Suchbäume
Fall (c):
• zu löschendes Element z hat zwei Kinder
• Schritt 1: Bestimme Nachfolger von z
6
7
4
3
5
SS 2009
9
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
138
Binäre Suchbäume
Fall (c):
• zu löschendes Element z hat zwei Kinder
• Schritt 1: Bestimme Nachfolger von z
• Schritt 2: Entferne Nachfolger
6
7
4
3
5
SS 2009
6
9
4
9
3
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
5
139
Binäre Suchbäume
Nachfolger hat nur
einKinder
Kind!
• zu löschendes Element z hat zwei
• Schritt 1: Bestimme Nachfolger von z
• Schritt 2: Entferne Nachfolger
Fall (c):
6
7
4
3
5
SS 2009
6
9
4
9
3
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
5
140
Binäre Suchbäume
Fall (c):
• zu löschendes Element z hat zwei Kinder
• Schritt 1: Bestimme Nachfolger von z
• Schritt 2: Entferne Nachfolger
6
7
4
3
5
SS 2009
6
9
4
9
3
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
5
141
Binäre Suchbäume
Fall (c):
• zu löschendes Element z hat zwei Kinder
• Schritt 1: Bestimme Nachfolger von z
• Schritt 2: Entferne Nachfolger; ersetze durch Nachfolger
6
7
4
3
5
SS 2009
7
9
4
9
3
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
5
142
Binäre Suchbäume
Löschen(T,z)
1. if lc[z]=nil or rc[z]=nil then y ← z
2. else y ← NachfolgerSuche(z)
3. if lc[y] ≠ nil then x ← lc[y]
4. else x ← rc[y]
5. if x ≠ nil then p[x] ← p[y]
6. if p[y]=nil then root[T] ← x
7. else if y=lc[p[y]] then lc[p[y]] ← x
8.
else rc[p[y]] ← x
9. if y ≠ z then key[z] ← key[y]
10. return y
SS 2009
6
7
4
3
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
5
9
143
Binäre Suchbäume
Löschen(T,z)
1. if lc[z]=nil or rc[z]=nil then y ← z
2. else y ← NachfolgerSuche(z)
3. if lc[y] ≠ nil then x ← lc[y]
4. else x ← rc[y]
5. if x ≠ nil then p[x] ← p[y]
6. if p[y]=nil then root[T] ← x
7. else if y=lc[p[y]] then lc[p[y]] ← x
8.
else rc[p[y]] ← x
9. if y ≠ z then key[z] ← key[y]
10. return y
SS 2009
Löschen(6)
6
7
4
3
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
5
9
144
Binäre Suchbäume
Referenz auf z
wird übergeben!
Löschen(T,z)
1. if lc[z]=nil or rc[z]=nil then y ← z
2. else y ← NachfolgerSuche(z)
3. if lc[y] ≠ nil then x ← lc[y]
4. else x ← rc[y]
5. if x ≠ nil then p[x] ← p[y]
6. if p[y]=nil then root[T] ← x
7. else if y=lc[p[y]] then lc[p[y]] ← x
8.
else rc[p[y]] ← x
9. if y ≠ z then key[z] ← key[y]
10. return y
SS 2009
Löschen(6)
6
7
4
3
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
5
9
145
Binäre Suchbäume
Löschen(T,z)
1. if lc[z]=nil or rc[z]=nil then y ← z
2. else y ← NachfolgerSuche(z)
3. if lc[y] ≠ nil then x ← lc[y]
4. else x ← rc[y]
5. if x ≠ nil then p[x] ← p[y]
6. if p[y]=nil then root[T] ← x
7. else if y=lc[p[y]] then lc[p[y]] ← x
8.
else rc[p[y]] ← x
9. if y ≠ z then key[z] ← key[y]
10. return y
SS 2009
Bestimme Knoten, der
gelöscht werden soll.
Der Knoten hat nur
einen Nachfolger
Löschen(6)
z 6
7
4
3
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
5
9
146
Binäre Suchbäume
Löschen(T,z)
1. if lc[z]=nil or rc[z]=nil then y ← z
2. else y ← NachfolgerSuche(z)
3. if lc[y] ≠ nil then x ← lc[y]
4. else x ← rc[y]
5. if x ≠ nil then p[x] ← p[y]
6. if p[y]=nil then root[T] ← x
7. else if y=lc[p[y]] then lc[p[y]] ← x
8.
else rc[p[y]] ← x
9. if y ≠ z then key[z] ← key[y]
10. return y
SS 2009
Bestimme Knoten, der
gelöscht werden soll.
Der Knoten hat nur
einen Nachfolger
Löschen(6)
z 6
7 y
4
3
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
5
9
147
Binäre Suchbäume
Bestimme den
Löschen(T,z)
Nachfolger
von y
1. if lc[z]=nil or rc[z]=nil then y ←
z
2. else y ← NachfolgerSuche(z)(falls dieser existiert).
3. if lc[y] ≠ nil then x ← lc[y]
Löschen(6)
4. else x ← rc[y]
5. if x ≠ nil then p[x] ← p[y]
z 6
6. if p[y]=nil then root[T] ← x
7. else if y=lc[p[y]] then lc[p[y]] ← x
8.
else rc[p[y]] ← x
4
9. if y ≠ z then key[z] ← key[y]
10. return y
3
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
5
7 y
9 x
148
Binäre Suchbäume
Löschen(T,z)
1. if lc[z]=nil or rc[z]=nil then y ←
z
Aktualisiere
2. else y ← NachfolgerSuche(z)Vaterzeiger von
3. if lc[y] ≠ nil then x ← lc[y]
x
Löschen(6)
4. else x ← rc[y]
5. if x ≠ nil then p[x] ← p[y]
z 6
6. if p[y]=nil then root[T] ← x
7. else if y=lc[p[y]] then lc[p[y]] ← x
8.
else rc[p[y]] ← x
4
9. if y ≠ z then key[z] ← key[y]
10. return y
3
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
5
7 y
9 x
149
Binäre Suchbäume
Löschen(T,z)
1. if lc[z]=nil or rc[z]=nil then y ← z
2. else y ← NachfolgerSuche(z)
3. if lc[y] ≠ nil then x ← lc[y]
4. else x ← rc[y]
5. if x ≠ nil then p[x] ← p[y]
6. if p[y]=nil then root[T] ← x
7. else if y=lc[p[y]] then lc[p[y]] ← x
8.
else rc[p[y]] ← x
9. if y ≠ z then key[z] ← key[y]
10. return y
SS 2009
Löschen(6)
z 6
7 y
4
3
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
5
9 x
150
Binäre Suchbäume
Löschen(T,z)
1. if lc[z]=nil or rc[z]=nil then y ← z
2. else y ← NachfolgerSuche(z)
3. if lc[y] ≠ nil then x ← lc[y]
Das rechte
Kind
Löschen(6)
4. else x ← rc[y]
von z wird x.
5. if x ≠ nil then p[x] ← p[y]
z 6
6. if p[y]=nil then root[T] ← x
7. else if y=lc[p[y]] then lc[p[y]] ← x
8.
else rc[p[y]] ← x
4
9. if y ≠ z then key[z] ← key[y]
10. return y
3
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
5
7 y
9 x
151
Binäre Suchbäume
Löschen(T,z)
1. if lc[z]=nil or rc[z]=nil then y ← z
2. else y ← NachfolgerSuche(z)
3. if lc[y] ≠ nil then x ← lc[y]
Das rechte
Kind
Löschen(6)
4. else x ← rc[y]
von z wird x.
5. if x ≠ nil then p[x] ← p[y]
z 6
6. if p[y]=nil then root[T] ← x
7. else if y=lc[p[y]] then lc[p[y]] ← x
8.
else rc[p[y]] ← x
4
9. if y ≠ z then key[z] ← key[y]
10. return y
3
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
5
7 y
9 x
152
Binäre Suchbäume
Löschen(T,z)
1. if lc[z]=nil or rc[z]=nil then y ← z
2. else y ← NachfolgerSuche(z)
3. if lc[y] ≠ nil then x ← lc[y]
Löschen(6)
4. else x ← rc[y]
5. if x ≠ nil then p[x] ← p[y]
6. if p[y]=nil then root[T] ← x Umkopieren von 7
7. else if y=lc[p[y]] then lc[p[y]]y←
x
nach
z.
8.
else rc[p[y]] ← x
4
9. if y ≠ z then key[z] ← key[y]
10. return y
3
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
5
9 x
153
Binäre Suchbäume
Löschen(T,z)
1. if lc[z]=nil or rc[z]=nil then y ← z
2. else y ← NachfolgerSuche(z)
3. if lc[y] ≠ nil then x ← lc[y]
4. else x ← rc[y]
5. if x ≠ nil then p[x] ← p[y]
6. if p[y]=nil then root[T] ← x
7. else if y=lc[p[y]] then lc[p[y]] ← x
8.
else rc[p[y]] ← x
9. if y ≠ z then key[z] ← key[y]
10. return y
SS 2009
Löschen(6)
7
4
3
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
5
154
Binäre Suchbäume
Löschen(T,z)
1. if lc[z]=nil or rc[z]=nil then y ← z
2. else y ← NachfolgerSuche(z)
3. if lc[y] ≠ nil then x ← lc[y]
4. else x ← rc[y]
5. if x ≠ nil then p[x] ← p[y]
6. if p[y]=nil then root[T] ← x
7. else if y=lc[p[y]] then lc[p[y]] ← x
8.
else rc[p[y]] ← x
9. if y ≠ z then key[z] ← key[y]
10. return y
SS 2009
Löschen(6)
7
4
3
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
5
155
Binäre Suchbäume
Löschen(T,z)
1. if lc[z]=nil or rc[z]=nil then y ← z
2. else y ← NachfolgerSuche(z)
3. if lc[y] ≠ nil then x ← lc[y]
4. else x ← rc[y]
5. if x ≠ nil then p[x] ← p[y]
6. if p[y]=nil then root[T] ← x
7. else if y=lc[p[y]] then lc[p[y]] ← x
8.
else rc[p[y]] ← x
9. if y ≠ z then key[z] ← key[y]
10. return y
SS 2009
Laufzeit O(h)
Löschen(6)
7
4
3
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
9
5
156
Binäre Suchbäume
Binäre Suchbäume:
• Ausgabe aller Elemente in O(n)
• Suche, Minimum, Maximum, Nachfolger in O(h)
• Einfügen, Löschen in O(h)
Frage:
• Wie kann man eine „kleine“ Höhe unter Einfügen und
Löschen garantieren?
SS 2009
Datenstrukturen und Algorithmen
11.Elementare Datenstrukturen
157
Balancierte binäre Suchbäume
AVL-Bäume
• Ein Baum heißt AVL-Baum, wenn für jeden Knoten gilt:
Die Höhe seines linken und rechten Teilbaums
unterscheidet sich höchstens um 1.
SS 2009
Datenstrukturen und Algorithmen
12.Balancierte Binärbäume
158
Balancierte binäre Suchbäume
Satz 12.1
Für jeden AVL-Baum der Höhe h mit n Knoten gilt:
(3/2)h≤ n ≤ 2h+1-1
SS 2009
Datenstrukturen und Algorithmen
12.Balancierte Binärbäume
159
Balancierte binäre Suchbäume
Satz 12.1
Für jeden AVL-Baum der Höhe h mit n Knoten gilt:
(3/2)h≤ n ≤ 2h+1-1
Korollar 12.2
Ein AVL-Baum mit n Knoten hat Höhe Θ(log n).
SS 2009
Datenstrukturen und Algorithmen
12.Balancierte Binärbäume
160
Balancierte binäre Suchbäume
Rotationen:
y
x
x
C
A
SS 2009
y
Rechtsrotation(T,y)
Linksrotation(T,x)
A
B
B
Datenstrukturen und Algorithmen
12.Balancierte Binärbäume
C
161
Balancierte binäre Suchbäume
Beispiel 1:
15
Rechtsrotation(T,y)
y
21
9
9
7
x
17
SS 2009
15
27
19
7
19 x
21 y
17
27
20
20
Datenstrukturen und Algorithmen
12.Balancierte Binärbäume
162
Balancierte binäre Suchbäume
Beispiel 2:
15
x
21
9
17
Linksrotation(T,x) x
y
27
19
7
SS 2009
21
20
Datenstrukturen und Algorithmen
12.Balancierte Binärbäume
27
15
9
7
y
19
17
20
163
Herunterladen