AlgoDatSoSe26/praktika/04_bin_baum/aufgabe1_graphviz.py
2026-05-11 15:31:57 +02:00

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