39 lines
1.5 KiB
Python
39 lines
1.5 KiB
Python
import sys
|
|
import os
|
|
sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', '..'))
|
|
|
|
from utils.algo_context import AlgoContext
|
|
from utils.algo_array import Array
|
|
from vorlesung.L05_binaere_baeume.bin_tree import BinaryTree
|
|
|
|
ctx = AlgoContext()
|
|
values = Array.from_file('data/seq0.txt', ctx)
|
|
tree = BinaryTree(ctx)
|
|
for cell in values:
|
|
tree.insert(cell.value)
|
|
|
|
# graph_traversal() erzeugt eine DOT-Datei und rendert sie als PDF.
|
|
# Die Datei landet im Verzeichnis, aus dem das Skript gestartet wird.
|
|
tree.graph_traversal()
|
|
|
|
# ── Antworten zu den Beobachtungsfragen ──────────────────────────────────────
|
|
|
|
# Welcher Knoten ist die Wurzel?
|
|
# Das erste eingefügte Element wird immer die Wurzel, da der Baum anfangs
|
|
# leer ist. Hier ist das -59 (erste Zeile von seq0.txt).
|
|
print("Wurzel:", tree.root.value) # -59
|
|
|
|
# Wie viele Blattknoten hat der Baum?
|
|
# Ein Blattknoten hat weder ein linkes noch ein rechtes Kind.
|
|
blattknoten = []
|
|
def merke_blatt(node):
|
|
if node.left is None and node.right is None:
|
|
blattknoten.append(node.value)
|
|
tree.in_order_traversal(merke_blatt)
|
|
print("Blattknoten:", blattknoten) # [-77, -50, 15, 48, 51, 58] → 6 Blätter
|
|
|
|
# Wie groß ist die Höhe des Baums?
|
|
# height() zählt rekursiv die längste Kante von der Wurzel zu einem Blatt.
|
|
# Mit 14 Elementen und zufälliger Reihenfolge ergibt sich hier Höhe 6.
|
|
print("Höhe:", tree.root.height()) # 6
|