🌳 Binärer Suchbaum — Einfügen, Suchen & Balancieren
Baue Schritt für Schritt einen binären Suchbaum auf, durchsuche und durchlaufe ihn. Füge Knoten ein, finde Elemente und vergleiche BST mit AVL-Autobalancierung. O(log n) vs. O(n) Komplexität.
Über den binären Suchbaum
Ein binärer Suchbaum (BST) ist eine grundlegende Datenstruktur der Informatik, in der jeder Knoten einen Wert speichert und höchstens zwei Kinder hat: Jeder Wert im linken Teilbaum ist kleiner als der Knoten, und jeder Wert im rechten Teilbaum ist größer. Diese Ordnungseigenschaft bedeutet, dass Suchen, Einfügen und Löschen von Elementen im Durchschnitt alle O(log n) Zeit benötigen — dieselbe asymptotische Effizienz wie binäre Suche in einem sortierten Array, aber mit der Flexibilität einer dynamisch verketteten Struktur. BSTs bilden die Grundlage für Datenbankindizes, Symboltabellen in Compilern und den std::map-Container in C++.
Dieser Simulator erlaubt dir, Werte einzufügen, zu suchen und zu löschen, Inorder-/Preorder-/Postorder-Durchläufe mit Schritt-für-Schritt-Animation anzusehen und AVL-Balancierung anzuwenden, um einen entarteten (verketteten) Baum in einen höhenbalancierten umzuwandeln. Das Statistik-Panel zeigt Knotenanzahl, Baumhöhe und ob der Baum das AVL-Balancekriterium erfüllt (|h_L − h_R| ≤ 1 bei jedem Knoten).
Häufig gestellte Fragen
Wie hoch ist die Zeitkomplexität der BST-Suche?
In einem balancierten BST benötigt die Suche O(log n) Zeit, weil jeder Vergleich die verbleibenden Kandidaten halbiert, genau wie bei der binären Suche. Im schlimmsten Fall — wenn Werte in sortierter Reihenfolge eingefügt werden und eine lineare Kette entsteht — entartet der Baum, und die Suche fällt auf O(n). Deshalb wurden selbstbalancierende Varianten wie AVL-Bäume und Rot-Schwarz-Bäume erfunden.
Was ist ein AVL-Baum, und wie funktioniert die Balancierung?
Ein AVL-Baum (benannt nach Adelson-Velsky und Landis, 1962) ist ein selbstbalancierender BST, der die Invariante wahrt, dass der Höhenunterschied zwischen linkem und rechtem Teilbaum (der Balance-Faktor) bei jedem Knoten höchstens 1 beträgt. Verletzt ein Einfügen oder Löschen dies, stellt eine Rotation — entweder einfach (links oder rechts) oder doppelt (links-rechts oder rechts-links) — die Balance in O(log n) Zeit wieder her, ohne die BST-Ordnungseigenschaft zu verändern.
Was liefert der Inorder-Durchlauf?
Der Inorder-Durchlauf (links → Wurzel → rechts) besucht jeden Knoten in aufsteigend sortierter Reihenfolge. Das ist eine der nützlichsten Eigenschaften eines BST: Ein einziger O(n)-Durchlauf liefert eine sortierte Liste. Im Gegensatz dazu ist Preorder (Wurzel → links → rechts) nützlich zum Serialisieren eines Baums, und Postorder (links → rechts → Wurzel) wird verwendet, wenn Kinder vor Eltern verarbeitet werden müssen, etwa beim Löschen eines gesamten Baums.
Was ist der Balance-Faktor, und wie wird er berechnet?
Der Balance-Faktor (bf) eines Knotens ist definiert als die Höhe seines linken Teilbaums minus die Höhe seines rechten Teilbaums. In einem AVL-Baum muss bf bei jedem Knoten −1, 0 oder +1 sein. Der Simulator zeigt „bf:x“ unter jedem Knoten an. Ein Knoten mit bf = +2 hat eine linkslastige Unwucht und benötigt eine Rechtsrotation (oder eine Links-Rechts-Doppelrotation, wenn das Kind rechtslastig ist).
Wann wird ein BST zu einem entarteten (Worst-Case-)Baum?
Werden Elemente in streng aufsteigender oder absteigender Reihenfolge eingefügt — etwa 1, 2, 3, 4, 5 — wird der BST zu einer rechten (oder linken) Kette mit Höhe n−1, strukturell identisch mit einer verketteten Liste. Jede Suche erfordert dann das Besuchen aller n Knoten, was O(n) Zeit ergibt. Versuche, sortierte Werte in diesem Simulator einzufügen, und vergleiche die Höhe mit einer zufällig geordneten Einfügung derselben Werte.
Wie wird das Löschen in einem BST umgesetzt?
Das Löschen eines Knotens in einem BST hat drei Fälle: (1) der Knoten ist ein Blatt — einfach entfernen; (2) der Knoten hat ein Kind — das Kind an seine Stelle setzen; (3) der Knoten hat zwei Kinder — den Wert des Knotens durch den kleinsten Wert in seinem rechten Teilbaum ersetzen (den Inorder-Nachfolger), dann diesen Nachfolgerknoten löschen, der garantiert in Fall 1 oder 2 fällt. Dieser Simulator implementiert alle drei Fälle.
Was sind reale Anwendungen von BSTs?
Datenbankmanagementsysteme verwenden B-Bäume (eine Verallgemeinerung von BSTs mit mehreren Schlüsseln pro Knoten) für ihre plattenbasierten Indizes und ermöglichen so O(log n)-Zeilensuchen über Millionen von Datensätzen. Der Linux-Kernel nutzt Rot-Schwarz-Bäume (eine weitere selbstbalancierende BST-Variante) zur Aufgabenplanung und Verwaltung virtueller Speicherbereiche. C++s std::map und std::set werden typischerweise als Rot-Schwarz-Bäume implementiert und garantieren O(log n)-Worst-Case-Operationen.
Was ist der Unterschied zwischen einem BST und einem Heap?
Beide sind baumbasierte Datenstrukturen, aber mit unterschiedlichen Ordnungseigenschaften. Ein BST erzwingt die Ordnung „linkes Kind kleiner als Elternteil“ im gesamten Baum, was die Suche effizient macht. Ein Heap erzwingt die Heap-Eigenschaft nur zwischen einem Elternteil und seinen unmittelbaren Kindern (Max-Heap: Elternteil ≥ Kinder), was das Finden des Minimums oder Maximums zu O(1) macht, aber beliebige Suche zu O(n). Heaps sind optimal für Prioritätswarteschlangen; BSTs sind optimal für sortierte Wörterbücher.
Wie hängt die Höhe eines balancierten BST mit der Anzahl der Knoten zusammen?
Für einen perfekt balancierten BST mit n Knoten gilt Höhe h = ⌊log₂ n⌋. Ein AVL-Baum garantiert eine Höhe von höchstens 1,44 × log₂(n+2), was immer noch O(log n) ist. Ein Rot-Schwarz-Baum garantiert eine Höhe von höchstens 2 × log₂(n+1). Diese Schranken sorgen dafür, dass alle Operationen selbst bei ungünstigsten Einfügereihenfolgen O(log n) bleiben.
Kann ein BST doppelte Werte speichern?
Standard-BST-Definitionen schließen Duplikate aus, aber reale Implementierungen behandeln sie auf eine von drei Arten: (1) Duplikate ignorieren (wie in diesem Simulator); (2) Duplikate im rechten Teilbaum zulassen (Wert ≤ Elternteil geht nach rechts); (3) einen Zähler zusammen mit jedem Knotenwert speichern. Die Wahl beeinflusst die Löschlogik und die Durchlauf-Semantik und wird daher meist beim Entwurf festgelegt, passend zu den Anforderungen der Anwendung.
Über diese Simulation
Diese Simulation baut live in deinem Browser einen binären Suchbaum auf, sodass du ganzzahlige Werte einfügen, suchen und löschen kannst und jeden Vergleich Schritt für Schritt hervorgehoben siehst. Ein einfacher BST erhält seine Form allein aus der Einfügereihenfolge, sodass er zu einem langsamen, kettenartigen Baum entarten kann; der AVL-Balance-Button schreibt dieselben Werte mithilfe von Rotationen in einen höhenbalancierten Baum um, sodass du das Suchverhalten vorher und nachher vergleichen kannst. Die drei Durchlauf-Buttons zeigen die klassischen Inorder-, Preorder- und Postorder-Besuchsreihenfolgen, und das Statistik-Panel meldet Knotenanzahl, Baumhöhe und ob die AVL-Balance-Bedingung aktuell erfüllt ist.
🔬 Was gezeigt wird
Jeder eingefügte Wert wird zu einem Knoten, der links oder rechts von seinem Elternteil platziert wird, gemäß der BST-Regel: kleinere Werte gehen nach links, größere nach rechts. Die Suche hebt den Vergleichspfad gelb hervor und wird grün, wenn der Wert gefunden wird, oder rot, wenn er fehlt, sodass du siehst, wie viele Vergleiche eine Suche tatsächlich benötigt — durchschnittlich O(log n) für einen balancierten Baum, aber O(n) für einen stark schiefen.
🎮 Bedienung
Gib einen Wert ein und drücke Einfügen, Suchen oder Löschen; nutze Zufällig 10, um den Baum schnell zu füllen, oder Löschen, um neu zu beginnen. Drücke AVL-Balance, um die aktuellen Werte per Rotationen in einen balancierten Baum umzuformen, und vergleiche dann die gemeldete Höhe vorher und nachher. Die Inorder-, Preorder- und Postorder-Buttons animieren jede Durchlaufreihenfolge im Ergebnisfeld, während das Statistik-Panel Knotenanzahl, Höhe, Balancestatus und die letzte durchgeführte Operation verfolgt.
💡 Wusstest du schon?
Der Inorder-Durchlauf eines beliebigen binären Suchbaums besucht Werte stets in streng aufsteigender Reihenfolge — allein diese Eigenschaft ist der Grund, warum BSTs sortierte Daten effizient durchsuchbar, einfügbar und löschbar halten, ohne je einen separaten Sortierschritt zu benötigen. Praktische Nachfahren des hier modellierten AVL-Baums, wie Rot-Schwarz-Bäume, bilden die Grundlage für C++s std::map und Javas TreeMap.
Häufig gestellte Fragen
Was passiert eigentlich, wenn ich einen Wert einfüge?
Der Simulator vergleicht den neuen Wert mit der Wurzel: kleinere Werte gehen nach links, größere nach rechts, das wiederholt sich rekursiv, bis eine leere Stelle erreicht wird, wo ein neuer Knoten erstellt wird. Dies bewahrt die BST-Ordnungseigenschaft — jeder linke Nachfolger ist kleiner und jeder rechte Nachfolger größer als sein Vorfahre — ohne jede Rebalancierung.
Was bewirkt der AVL-Balance-Button am Baum?
Er liest jeden Wert per Inorder-Durchlauf aus, leert den Baum und fügt dieselben Werte dann mit AVL-artigem Einfügen wieder ein, was Links- und Rechtsrotationen anwendet, sobald sich die Höhen des linken und rechten Teilbaums eines Knotens um mehr als eins unterscheiden. Die Werte bleiben unverändert, aber die entstehende Form ist höhenbalanciert, wodurch sich die Baumhöhe typischerweise deutlich verringert.
Was ist der Unterschied zwischen den drei Durchlauf-Buttons?
Inorder besucht den linken Teilbaum, dann den Knoten, dann den rechten Teilbaum und liefert Werte in aufsteigend sortierter Reihenfolge. Preorder besucht zuerst den Knoten, dann links, dann rechts, was nützlich zum Kopieren oder Serialisieren eines Baums ist. Postorder besucht beide Teilbäume vor dem Knoten selbst — die Reihenfolge, die zum sicheren Löschen eines gesamten Baums benötigt wird.
Warum kann die Suche O(n) statt O(log n) Zeit benötigen?
Werden Werte bereits in sortierter Reihenfolge eingefügt, wächst der einfache BST zu einer einseitigen Kette heran, die sich nicht von einer verketteten Liste unterscheidet, sodass eine Suche möglicherweise jeden Knoten prüfen muss. Versuche, Zahlen in aufsteigender Reihenfolge einzufügen, notiere die gemeldete Höhe und drücke dann AVL-Balance, um zu sehen, wie Höhe und Worst-Case-Suchkosten wieder zusammenschrumpfen.
Was bedeutet die kleine „bf“-Zahl unter jedem Knoten?
Es ist der Balance-Faktor des Knotens: die Höhe seines linken Teilbaums minus die Höhe seines rechten Teilbaums. Ein AVL-Baum hält diesen Wert für jeden Knoten bei −1, 0 oder +1; ein größerer Betrag signalisiert eine Unwucht, die eine Rotation korrigieren müsste.
Animierte BST-Operationen: Einfügen, Suchen, Löschen und Inorder-Durchlauf. Wechsle in den AVL-Modus, um automatische Balancierungsrotationen zu sehen. Zeigt Big-O-Komplexität und Baumhöhe live an.
3D · Three.js / WebGL-Renderer · Ziel: 60 FPS · läuft vollständig im Browser, keine Installation nötig