24.11.2013 Aufrufe

Teil 7: Bäume Beispiele (1)

Teil 7: Bäume Beispiele (1)

Teil 7: Bäume Beispiele (1)

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

Knoten<br />

Definition von binären Suchbäumen<br />

Alle Knoten in einem Baum enthalten<br />

einen Schlüssel (Key) und evtl. weitere Daten (Value).<br />

Definition<br />

Ein binärer Suchbaum ist ein Binärbaum, bei dem<br />

für alle Knoten k folgende Eigenschaften gelten:<br />

struct Node<br />

{<br />

KeyType key;<br />

ValueType value;<br />

Node* left; // linkes Kind<br />

Node* right; // rechtes Kind<br />

};<br />

(1)! Alle Schlüssel im linken <strong>Teil</strong>baum sind kleiner als der Schlüssel im Knoten k<br />

(2)! Alle Schlüssel im rechten <strong>Teil</strong>baum sind größer als der Schlüssel im Knoten k<br />

Beachte: Die Schlüssel müssen hier eindeutig sein. Es ist aber auch möglich, dass gleiche<br />

Schlüssel mehrfach vorkommen dürfen, was kleine Änderungen in den Algorithmen erfordert.<br />

<strong>Beispiele</strong><br />

7<br />

2 8<br />

6<br />

2 8<br />

1<br />

3<br />

Degenerierter<br />

Suchbaum<br />

1 4<br />

4<br />

4<br />

3 6<br />

3<br />

In den <strong>Bäume</strong>n sind nur<br />

die Schlüssel dargestellt.<br />

O. Bittel; Sept. 2008 Programmiertechnik 2 - <strong>Bäume</strong> 7-21<br />

7<br />

Suchen in binären Suchbäumen<br />

Operation searchR<br />

bool searchR(KeyType k, ValueType& v, const Node* p);<br />

Suche nach einem Knoten mit Schlüssel k im <strong>Teil</strong>baum p.<br />

Falls gefunden, wird der im Knoten abspeicherte Datenwert v und<br />

der Rückgabewert true zurückgeliefert.<br />

Falls nicht gefunden, wird der Rückgabewert false zurückgeliefert.<br />

Algorithmus<br />

Beispiel<br />

bool searchR(KeyType k, ValueType& v, const Node* p)<br />

{<br />

p 7<br />

if (p == 0)<br />

R steht für<br />

return false;<br />

rekursiv<br />

else if (k < p->key)<br />

2 8<br />

return searchR(k, v, p->left);<br />

else if (k > p->key)<br />

return searchR(k, v, p->right);<br />

else // k gefunden<br />

{<br />

1 4<br />

v = p->value;<br />

return true;<br />

3 6<br />

}<br />

} searchR(3,v,p)<br />

O. Bittel; Sept. 2008 Programmiertechnik 2 - <strong>Bäume</strong> 7-22

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!