Hallo BlackJack,
ich habe zurzeit folgende Klasse definiert:
Code: Alles auswählen
class Tree:
def __init__(self, root_value, left=None, right=None):
if left is None and right is None:
pass
self.root_value = root_value
self.left = left
self.right = right
def __str__(self):
return str(self.root_value)
def size(self):
count = 1
if self.left:
count += self.left.size()
if self.right:
count += self.right.size()
return count
def depth(self):
left_depth = self.left.depth() if self.left else 0
right_depth = self.right.depth() if self.right else 0
return max(left_depth, right_depth) + 1
def traversal_help(self):
if self.left is not None:
for node in self.left.traversal_help():
yield node
yield self
if self.right is not None:
for node in self.right.traversal_help():
yield node
def traversal(self):
out = []
for el in list(self.traversal_help()):
out.append(str(el))
return out
def insert(self,parent,left,right):
for node in self.traversal_help():
if node.root_value == parent and node.right == None and node.left == None:
node.left = Tree(left)
node.right = Tree(right)
return
(Mindestens) mit der Funktion "insert" kann etwas nicht stimmen, denn wenn ich meine Klasse via online-Auswerter teste, erhalte ich die Fehlermeldung:
" File "<string>", line 4, in <module>
AttributeError: 'NoneType' object has no attribute 'root_value'"
Leider kann man nicht sehen, mit welchen Eingaben der online-Auswerter testet, aber gibt es eine bessere Darstellung / Implementierung der insert-Funktion?
Für die Funktion "insert" muss gelten: es wird der parent gesucht, und dort left und right unterhalb eingesetzt. Dabei müssen zwingend left UND right vorhanden sein, andernfalls sollte nichts unternommen werden. Zudem ist es möglich, dass bereits existierende children überschrieben werden.
Danke für jeden Tipp und Hinweis!
PS: Natürlich dürfen auch andere Funktionen umgeschrieben werden, solange sie das machen, was sie sollten
