Die Suche in einem Rot-Schwarz Suchbaum ist gleich der Suche in einem binaeren Suchbaum.
Jede Suche in einem binaeren Suchbaum terminiert entweder an einem internen Knoten, wenn der gesuchte Schluessel gefunden wurde, oder an einem externen Knoten, wobei die Suche nicht erfolgreich war.
Vorraussetzungen fuer die hier vorliegende Implementierung:
T sei ein binaerer Baum, der die binaere Suchbedingung erfuellt.
Die Anzahl der Knoten in T sei endlich.
K sei der gesuchte Schluessel. Fuer die hier zugrunde liegende Implementierung ist wichtig, dass der Schluessel nicht ,,0'' ist. Diese Einschraenkung geht ausschliesslich aus der Implementierung hervor und nicht aus dem Algorithmus an sich.
Dann gilt es folgende Faelle zu betrachten:
Ist der Schluessel der Wurzel von T gleich dem gesuchten Schluessel, so terminiert der Algorithmus. Bei jedem Durchlauf der Schleife wird T durch einen Unterbaum von der Wurzel von T ersetzt. Damit verringert sich bei jedem Durchlauf der Schleife die Hoehe von T um den Wert ``1''. Sei h die Hoehe von T. Da die Datenstruktur ``Baum'' auf eine endliche Anzahl von Knoten definiert ist, ist h endlich. Ist h=0 (T ist der leere Baum), terminiert der Algorithmus. Da man eine natuerliche Zahl nicht unendlich oft verringern kann, terminiert der Algorithmus.
Da die Hoehe bei einem Schleifendurchlauf stets um den Wert ``1'' verringert wird, laesst sich aussagen, dass die Zeit, die zum Finden eines Elementes eines binaeren Baums der Hoehe h benoetigt wird, ist. Fuer einen Rot-Schwarz Baum gilt laut Satz 1 des Kapitels 2.3.1, dass die benoetigte Zeit zum Auffinden eines Elementes in einem Rot-Schwarz Baum mit n Knoten ist.
RBELEMENT CURRENT=ROOT; // BEGINNEN BEI DER WURZEL VON T.
WHILE (CURRENT!=NIL) { // UEBERPRUEFEN, OB T DER LEERE BAUM
// IST. FALLS T LEER IST, TERMINIERE.
IF (KEY==CURRENT.SEARCHKEY) { // WENN DER SUCHSCHLUESSEL DER
// WURZEL VON T GLEICH DEM
// GESUCHTEN SCHLUESSEL IST,
RETURN KEY; // TERMINIERE ERFOLGREICH UND
// LIEFERE DEN SCHLUESSEL ZURUECK.
} ELSE { // SONST
IF (KEY<CURRENT.SEARCHKEY) // WENN DER GESUCHTE SCHLUESSEL
// KLEINER IST
CURRENT=CURRENT.LEFT; // ERSETZE T DURCH DEN LINKEN
// UNTERBAUM
ELSE // WENN DER GESUCHTE SCHLUESSEL
// GROESSER IST,
CURRENT=CURRENT.RIGHT; // ERSETZE T DURCH DEN RECHTEN
// UNTERBAUM.
}
}
RETURN 0; // FALLS T DER LEERE BAUM IST,
// TERMINIERE NICHT ERFOLGREICH
// UND LIEFERE "0" ZURUECK.
}