Menu
Coddy logo textTech

Binärer Suchbaum (BST)

Zuletzt aktualisiert

Ein binärer Suchbaum hält seine Werte sortiert: Für jeden Knoten sind alle Werte im linken Teilbaum kleiner und alle im rechten Teilbaum größer. Um einen Wert einzufügen oder zu finden, startest du an der Wurzel und gehst je nach Vergleich wiederholt nach links oder rechts, sodass jeder Schritt den Suchraum halbiert. Drücke oben auf Wiedergabe, um zu sehen, wie Werte per Vergleich platziert werden und eine Suche im Baum hinabläuft.

In einem ausgeglichenen Baum laufen diese Operationen in O(log n)-Zeit. Der Haken: Bereits sortierte Daten einzufügen lässt den Baum zu einer verketteten Liste mit O(n)-Operationen entarten - genau deshalb gibt es selbstbalancierende Varianten wie AVL- und Rot-Schwarz-Bäume.

Zeit- und Speicherkomplexität

OperationAusgeglichenSchlimmster Fall (entartet)
SucheO(log n)O(n)
EinfügenO(log n)O(n)
LöschenO(log n)O(n)
SpeicherO(n)O(n)

Schritt für Schritt (Einfügen)

SchrittWas passiert
1Ist der Baum leer, wird der neue Wert zur Wurzel.
2Andernfalls beginne an der Wurzel.
3Ist der Wert kleiner, gehe zum linken Kind; ist er größer, gehe nach rechts.
4Wiederhole, bis du eine leere Stelle erreichst.
5Hänge den neuen Wert dort als Blatt an.

Durchgerechnetes Beispiel

Einfügen von [5, 3, 8, 1, 4] in einen leeren Baum, einen Wert nach dem anderen:

EinfügenGenommener PfadAktion
5-Der Baum ist leer, also wird 5 zur Wurzel.
353 < 5, gehe nach links; die Stelle ist leer, hänge 3 als linkes Kind von 5 an.
858 > 5, gehe nach rechts; die Stelle ist leer, hänge 8 als rechtes Kind von 5 an.
15 -> 31 < 5 gehe nach links, dann 1 < 3 gehe nach links; hänge 1 als linkes Kind von 3 an.
45 -> 34 < 5 gehe nach links, dann 4 > 3 gehe nach rechts; hänge 4 als rechtes Kind von 3 an.

Wann ein binärer Suchbaum sinnvoll ist

Verwende ihn, wennVermeide ihn, wenn
Du sortierte Reihenfolge plus schnelle Suchen brauchst und Einfügungen in zufälliger Reihenfolge eintreffen.Deine Daten bereits sortiert eintreffen: Ein unausgeglichener BST verschlechtert sich auf O(n) pro Operation.
Du willst, dass eine In-order-Traversierung die Werte gratis in sortierter Reihenfolge liefert.Du nur Mitgliedschaftstests ohne Reihenfolge brauchst: Eine Hashtabelle bietet im Mittel O(1)-Suchen.
Du Bereichsabfragen oder den Nachfolger/Vorgänger eines Schlüssels brauchst.Du garantierte O(log n)-Schranken brauchst: Greife stattdessen zu einem selbstbalancierenden AVL- oder Rot-Schwarz-Baum.
Der Datensatz sich häufig ändert und das Aktualisieren eines sortierten Arrays teuer wäre.Der Datensatz fest und nur lesbar ist: Ein sortiertes Array mit binärer Suche ist einfacher und cache-freundlicher.

Binary Search Tree-Code

Eine saubere, lauffähige Binary Search Tree-Implementierung in Python, JavaScript, Java, C++, C. Wähle eine Sprache, kopiere den Code oder öffne ihn vorgeladen im Coddy-Playground.

Binary Search Tree-Code in Python

Python
1class Node:2    def __init__(self, key):3        self.key = key4        self.left = None5        self.right = None6
7
8def insert(node, key):9    if node is None:10        return Node(key)11    if key < node.key:12        node.left = insert(node.left, key)13    elif key > node.key:14        node.right = insert(node.right, key)15    return node  # duplicates are ignored16
17
18def search(node, key):19    if node is None:20        return False21    if key == node.key:22        return True23    if key < node.key:24        return search(node.left, key)25    return search(node.right, key)26
27
28def inorder(node):29    if node is None:30        return []31    return inorder(node.left) + [node.key] + inorder(node.right)32
33
34root = None35for key in [8, 3, 10, 1, 6, 14, 4, 7]:36    root = insert(root, key)37
38print("Inorder (sorted):", inorder(root))39print("search(6): ", search(root, 6))40print("search(5): ", search(root, 5))
Führe diesen Code im Python-Playground aus

FAQ zum binären Suchbaum

Wie ist die Zeitkomplexität eines binären Suchbaums?
Suche, Einfügen und Löschen sind in einem ausgeglichenen Baum O(log n), weil jeder Vergleich die Hälfte der verbleibenden Knoten verwirft. Im schlimmsten Fall - ein durch sortierte Einfügungen zu einer Kette entarteter Baum - verschlechtern sie sich auf O(n).
Was ist der Unterschied zwischen einem Binärbaum und einem binären Suchbaum?
Ein Binärbaum ist jeder Baum, bei dem jeder Knoten höchstens zwei Kinder hat, ohne Ordnungsregel. Ein binärer Suchbaum fügt die Invariante hinzu, dass die Werte des linken Teilbaums kleiner und die des rechten größer als der Knoten sind, was die schnelle Suche ermöglicht.
Warum kann ein binärer Suchbaum langsam werden?
Werden Werte in sortierter (oder umgekehrt sortierter) Reihenfolge eingefügt, geht jeder neue Knoten auf dieselbe Seite und erzeugt einen hohen, entarteten Baum, der sich wie eine verkettete Liste verhält: O(n) pro Operation. Selbstbalancierende Bäume (AVL, Rot-Schwarz) rotieren Knoten, um das zu verhindern.
Was ist der Unterschied zwischen einem binären Suchbaum und einer Hashtabelle?
Eine Hashtabelle bietet im Mittel O(1)-Suchen, speichert die Schlüssel aber in keiner bestimmten Reihenfolge und kann daher keine Bereichs- oder Nachfolgerabfragen beantworten. Ein binärer Suchbaum ist mit O(log n) etwas langsamer, hält die Schlüssel aber sortiert, sodass du sie geordnet durchlaufen und Nachbarwerte finden kannst. Wähle einen BST, wenn die Reihenfolge zählt, und eine Hashtabelle, wenn du nur Mitgliedschaftstests brauchst.
Wann sollte ich einen selbstbalancierenden Baum statt eines einfachen BST verwenden?
Verwende einen selbstbalancierenden Baum (AVL, Rot-Schwarz), wann immer du die Einfügereihenfolge nicht kontrollieren kannst und garantierte O(log n)-Leistung brauchst. Ein einfacher BST ist gut für die Lehre, für kleine Datensätze oder wenn Schlüssel in zufälliger Reihenfolge eintreffen, bietet aber keinen Schutz gegen den entarteten schlimmsten Fall.
Liefert eine In-order-Traversierung eines BST sortierte Werte?
Ja. Zuerst den linken Teilbaum, dann den Knoten, dann den rechten Teilbaum zu besuchen liefert die Schlüssel in aufsteigender Reihenfolge, was direkt aus der BST-Invariante folgt. Ein häufiger Fehler ist, dasselbe von einem einfachen Binärbaum zu erwarten: Ohne Ordnungsregel erzeugt die In-order-Traversierung keine sinnvolle Folge.
Coddy programming languages illustration

Meistere Algorithmen mit Coddy

LOS GEHT'S