Binärer Suchbaum in Python
Ein binärer Suchbaum hält kleinere Werte im linken und größere Werte im rechten Teilbaum, sodass jeder Vergleich die Hälfte des restlichen Baums ausschließt.
Was ist Binärer Suchbaum?
Ein binärer Suchbaum hält kleinere Werte im linken und größere Werte im rechten Teilbaum, sodass jeder Vergleich die Hälfte des restlichen Baums ausschließt.
Baue einen binären Suchbaum in Python: Werte einfügen, suchen und sortiert ausgeben.
Wann wird dieser Ansatz verwendet?
- Algorithmen und Datenstrukturen anhand von ausführbarem Code verstehen.
- Die einzelnen Verarbeitungsschritte und Randfälle nachvollziehen.
- Laufzeit und Speicherbedarf verschiedener Lösungswege vergleichen.
So funktioniert es
Füge Werte ein, um zu sehen, wo sie landen, suche einen Wert, um seinem Weg zu folgen, und starte eine Traversierung, um die Besuchsreihenfolge zu sehen.
Beispielcode
class Node:
def __init__(self, value):
self.value = value
self.left = None # smaller values go left
self.right = None # larger values go right
def insert(node, value):
if node is None:
return Node(value)
if value < node.value:
node.left = insert(node.left, value)
elif value > node.value:
node.right = insert(node.right, value)
return node
def contains(node, value):
# Each comparison discards one whole subtree.
while node is not None:
if value == node.value:
return True
node = node.left if value < node.value else node.right
return False
def inorder(node):
# Left subtree, node, right subtree: visits values in sorted order.
if node is None:
return []
return inorder(node.left) + [node.value] + inorder(node.right)
def height(node):
if node is None:
return 0
return 1 + max(height(node.left), height(node.right))
root = None
for value in [50, 30, 70, 20, 40, 60, 80]:
root = insert(root, value)
print("inorder:", inorder(root))
print("contains 60:", contains(root, 60))
print("contains 65:", contains(root, 65))
print("height:", height(root))
Erwartete Ausgabe
inorder: [20, 30, 40, 50, 60, 70, 80]
contains 60: True
contains 65: False
height: 3
So funktioniert es
insert() läuft von der Wurzel nach unten und hängt den Wert an seiner Stelle an. contains() folgt nur einem einzigen Pfad, was in einem ausgeglichenen Baum O(log n) Schritte dauert. Eine Inorder-Traversierung besucht links, Knoten, rechts, daher kommen die Werte sortiert heraus.
Ändere die Werte und führe das Programm im CodeUtility Python Online-Compiler aus, ohne Python lokal zu installieren.
Übungsaufgaben
Verändere Eingaben und Randfälle, bevor du die Lösung mit größeren Datenmengen testest.
- Teste leere Eingaben, ein Element und doppelte Werte.
- Gib den Zustand nach jedem Schritt aus.
- Vergleiche Laufzeit und Speicherbedarf mit einem alternativen Verfahren.
Mit einer Challenge üben
Nutze den Inhalt dieser Lektion, um ein echtes Problem zu lösen. Jede Challenge läuft im Browser, mit sofortigen Tests und einem KI-Review.
- Tree Diameter A tree is a connected undirected graph with no cycles. Mittel
- Ordnergrößen mit Composite Berechne die Gesamtgröße jedes Ordners in einem Baum, in dem Ordner Dateien und andere Ordner enthalten. Mittel