Teil 7: Bäume Beispiele (1)
Teil 7: Bäume Beispiele (1)
Teil 7: Bäume Beispiele (1)
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