158 lines
4.8 KiB
Python
158 lines
4.8 KiB
Python
class Node:
|
|
def __init__(self, value):
|
|
self.value = value # Wert des Knotens
|
|
self.left = None # Linkes Kind
|
|
self.right = None # Rechtes Kind
|
|
|
|
# Fügt rekursiv ein neues Element mit dem Wert value in den Baum ein
|
|
def insert(self, value):
|
|
if self.value == value:
|
|
return print("Die Daten existieren schon.")
|
|
else:
|
|
if self.value > value:
|
|
if self.left is not None:
|
|
return self.left.insert(value)
|
|
else:
|
|
self.left = Node(value)
|
|
else:
|
|
if self.right is not None:
|
|
return self.right.insert(value)
|
|
else:
|
|
self.right = Node(value)
|
|
|
|
# Methode zur Darstellung des Baums
|
|
def show(self, level):
|
|
if self.left is not None:
|
|
self.left.show(level + 1)
|
|
print(' ' * 4 * level + "->" + str(self.value))
|
|
if self.right is not None:
|
|
self.right.show(level + 1)
|
|
|
|
# Sucht ein Element mit dem Wert value im Baum
|
|
def search(self, value):
|
|
if self.value == value:
|
|
return True
|
|
elif self.value > value:
|
|
if self.left is not None:
|
|
return self.left.search(value)
|
|
else:
|
|
if self.right is not None:
|
|
return self.right.search(value)
|
|
|
|
# Zählt die Anzahl der Elemente im Baum
|
|
def count(self):
|
|
count = 1
|
|
if self.left is not None:
|
|
count += self.left.count()
|
|
if self.right is not None:
|
|
count += self.right.count()
|
|
return count
|
|
|
|
# Löscht ein Element mit dem Wert value aus dem Baum
|
|
def delete(self, value):
|
|
if value < self.value:
|
|
if self.left is not None:
|
|
self.left = self.left.delete(value)
|
|
elif value > self.value:
|
|
if self.right is not None:
|
|
self.right = self.right.delete(value)
|
|
else:
|
|
if self.left is None:
|
|
return self.right
|
|
elif self.right is None:
|
|
return self.left
|
|
else:
|
|
min_larger_node = self.right
|
|
while min_larger_node.left is not None:
|
|
min_larger_node = min_larger_node.left
|
|
self.value = min_larger_node.value
|
|
self.right = self.right.delete(min_larger_node.value)
|
|
return self
|
|
|
|
# Gibt die Elemente des Baums in einer Liste (preorder) aus
|
|
def treeToList(self, output):
|
|
output.append(self.value)
|
|
if self.left is not None:
|
|
self.left.treeToList(output)
|
|
if self.right is not None:
|
|
self.right.treeToList(output)
|
|
return output
|
|
|
|
# Sucht das kleinste Element im Baum
|
|
def min(self):
|
|
if self.left is not None:
|
|
return self.left.min()
|
|
else:
|
|
return self.value
|
|
|
|
|
|
class Tree:
|
|
def __init__(self):
|
|
self.root = None # Wurzel des Baums
|
|
|
|
# Fügt rekursiv ein neues Element mit dem Wert value in den Baum ein
|
|
def insert(self, value):
|
|
if self.root is None:
|
|
self.root = Node(value)
|
|
else:
|
|
return self.root.insert(value)
|
|
|
|
# Methode zur Darstellung des Baums
|
|
def show(self):
|
|
if self.root is not None:
|
|
self.root.show(0)
|
|
else:
|
|
print("Baum ist leer")
|
|
|
|
# Sucht ein Element mit dem Wert value im Baum
|
|
def search(self, value):
|
|
if self.root is not None:
|
|
print(f"gesuchter Knoten: {self.root.search(value)}")
|
|
else:
|
|
print("gesuchter Knoten: Baum ist leer")
|
|
|
|
# Zählt die Anzahl der Elemente im Baum
|
|
def count(self):
|
|
if self.root is not None:
|
|
print(f"Anzahl Knoten: {self.root.count()}")
|
|
else:
|
|
print("Anzahl Knoten: 0")
|
|
|
|
# Löscht ein Element mit dem Wert value aus dem Baum
|
|
def delete(self, value):
|
|
if self.root is not None:
|
|
self.root = self.root.delete(value)
|
|
else:
|
|
print("Baum ist leer, nichts zu löschen.")
|
|
|
|
# Gibt die Elemente des Baums in einer Liste (preorder) aus
|
|
def treeToList(self):
|
|
output = []
|
|
if self.root is not None:
|
|
return self.root.treeToList(output)
|
|
else:
|
|
return []
|
|
|
|
# Erzeugt rekursiv einen neuen Baum aus den Elementen einer Liste
|
|
def createTree(self, list):
|
|
if list:
|
|
mid = len(list)//2
|
|
self.insert(list[mid])
|
|
self.createTree(list[:mid])
|
|
self.createTree(list[mid+1:])
|
|
|
|
# Sucht das kleinste Element im Baum
|
|
def min(self):
|
|
if self.root is not None:
|
|
return print(f"Kleinstes Element: {self.root.min()}")
|
|
else:
|
|
return print("Kleinstes Element: Baum ist leer")
|
|
|
|
b = Tree()
|
|
b.insert(4)
|
|
b.insert(7)
|
|
b.insert(2)
|
|
b.insert(8)
|
|
b.insert(3)
|
|
b.insert(1)
|
|
print(b.treeToList()) |