Я пытаюсь добавить элементы в двоичное дерево и печатать их в предварительном порядке.
Элементы, добавляемые в двоичное дерево, имеют тип узла.
I ' Получается ошибка при добавлении элемента: AttributeError: 'NoneType' object has no attribute 'left'
Пожалуйста, дайте мне знать, где я должен внести изменения. Ниже приведен код:
class Node(object):
def __init__(self, item, left=None, right=None):
self.item = item
self.left = None
self.right = None
def __repr__(self):
return '{}'.format(self.item)
class BinaryTree(object):
def __init__(self, root=None):
self.root = root
def add(self, value):
val = self.root
if not val:
val = value
elif not val.left:
val = value
elif not val.right:
val = value
else:
self.left = val.left.add(value)
return val
def preorder(self):
val = self.root
print(val)
if val.left:
val.left.preorder()
if val.right:
val.right.preorder()
def main():
binary_tree = BinaryTree()
print("Adding nodes in tree")
for i in range(1, 11):
node = Node(i)
binary_tree.add(node)
print("Printing preorder...")
binary_tree.preorder()
if __name__ == '__main__':
main()
Ошибка:
Adding nodes in tree
Printing preorder...
None
Traceback (most recent call last):
File ".\binary_tree_test5.py", line 52, in <module>
main()
File ".\binary_tree_test5.py", line 49, in main
binary_tree.preorder()
File ".\binary_tree_test5.py", line 33, in preorder
if val.left:
AttributeError: 'NoneType' object has no attribute 'left'