Nächste Seite: Balancierte Binärbäume
Aufwärts: Suchbäume
Vorherige Seite: Suchbäume
  Inhalt
- Search(p,x)
- Die Suche eines Schlüsselwerts
erfolgt durch den
Funktionsaufruf
, wobei
der
Wurzelknoten ist1. Wir verfahren nach folgender Methode:
- starte in der Wurzel
- sei
der aktuelle Knoten
- ist
, dann suche
im linken Teilbaum von
(falls möglich
)
- ist
, dann suche
im rechten Teilbaum von
(falls möglich
)
- ist
, dann beende die Suche.
Der Algorithmus
ist so formuliert, dass
ein Knoten
zurückgegeben wird:
- Für eine erfolgreiche Suche ist
.
- Für eine erfolglose Suche zeigt
auf NIL.
Die Rückgabe des Knotens
wird für das Löschen bzw.
Einfügen benötigt.
- Insert(VAR p, x)
- Um einen Schlüssel in einem Suchbaum einzufügen, suchen wir
zunächst nach dem einzufügenden Schlüssel
im
gegebenen Baum. Der nichtgefundene Schlüssel
wird
dann an der erwartenden Position
unter den Blättern
eingefügt. D.h. wir ersetzen das Blatt durch einen inneren
Knoten mit dem einzufügenden Schlüssel
als Wert
und zwei Blätter als Söhnen. So entsteht wieder ein Suchbaum.
Abbildung 3 veranschaulicht dies.
Abbildung 3:
Einfügen in einen Suchbaum
 |
- Delete(p,x)
- Beim Löschen eines Schlüsselwerts
, der als Markierung
eines Knotens
gefunden wurde, sind drei Fälle zu unterscheiden:
- Ist
ein Blatt, dann wird
einfach gelöscht.
- Wenn
genau einen Sohn
hat, dann kann man
wie folgt vorgehen:
- ist
die Wurzel, dann wird
gelöscht
und
zur Wurzel gemacht.
- ist
der Vater von
, dann kann man
löschen und die Kante
durch die Kante
ersetzen.
- Wir nehmen an, dass
zwei Söhne hat.
Wir bestimmen zunächst denjenigen Knoten
im linken
Teilbaum von
, der mit dem nächst kleineren Schlüsselwert
markiert ist. Dieser ist der grösste Schlüsselwert im linken Teilbaum
von
und lässt sich durch die Suche des Schlüsselwertes
im linken Teilbaum von
bestimmen.
Die Markierung
wird dann zur Markierung von
gemacht und der Knoten
gelöscht. Zu beachten: Der Knoten
hat keinen rechten Sohn, kann also gemäss Fall 1 oder 2
gelöscht werden. Tatsächlich gelöscht wird also stets nur
solche Knoten, die höchstens einen Sohn haben.
Abbildung 4:
Löschen von Knoten
 |
Abbildung 5:
Löschen von Knoten(2)
 |
Im wesentlichen wird für alle drei Operationen der Suchbaum auf
einem Pfad von der Wurzel bis zu einem Blatt durchlaufen. Damit
ergeben sich folgende Kosten:
- Die Grundoperationen Suchen, Löschen und Einfügen in
einen binären Suchbaum
lassen sich in Zeit
durchführen. Dabei ist
die
Anzahl der Schlüsselwerte (Knoten) in
.
-
Nächste Seite: Balancierte Binärbäume
Aufwärts: Suchbäume
Vorherige Seite: Suchbäume
  Inhalt
Daniel Hottinger
2001-05-16