This commit is contained in:
schuster 2024-12-04 08:58:55 +01:00
commit affab00a70
4 changed files with 169 additions and 0 deletions

18
main.py Normal file
View File

@ -0,0 +1,18 @@
from tree import Tree
from queue import Queue
from stack import Stack
# Beispielbaum
baum = Tree()
baum.insert(9)
baum.insert(6)
baum.insert(8)
baum.insert(5)
baum.insert(4)
baum.insert(11)
baum.insert(12)
baum.insert(15)
baum.insert(10)
baum.insert(13)
baum.show()

19
queue.py Normal file
View File

@ -0,0 +1,19 @@
class Queue:
def __init__(self):
self.items = []
def is_empty(self):
return len(self.items) == 0
def enqueue(self, item):
self.items.append(item)
def dequeue(self):
if not self.is_empty():
return self.items.pop(0)
def size(self):
return len(self.items)
def __str__(self):
return str(self.items)

27
stack.py Normal file
View File

@ -0,0 +1,27 @@
class Stack:
def __init__(self):
self.items = []
def is_empty(self):
return len(self.items) == 0
def push(self, item):
self.items.append(item)
def pop(self):
if not self.is_empty():
return self.items.pop()
else:
raise IndexError("Pop von leerem Stack")
def peek(self):
if not self.is_empty():
return self.items[-1]
else:
raise IndexError("Peek von leerem Stack")
def size(self):
return len(self.items)
def __str__(self):
return str(self.items)

105
tree.py Normal file
View File

@ -0,0 +1,105 @@
from queue import Queue
from stack import Stack
class Node:
def __init__(self, value):
self.value = value # Wert des Knotens
self.left = None # Linkes Kind
self.right = None # Rechtes Kind
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)
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)
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)
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
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
class Tree:
def __init__(self):
self.root = None # Wurzel des Baums
def insert(self, value):
if self.root is None:
self.root = Node(value)
else:
return self.root.insert(value)
def show(self):
if self.root is not None:
self.root.show(0)
else:
print("Baum ist leer")
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")
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.")
def treeToList(self):
output = []
if self.root is not None:
return self.root.treeToList(output)
else:
return []