Ошибка при печати узлов в двоичном дереве Python - PullRequest
0 голосов
/ 15 марта 2019

Когда я запускаю эту программу, из-за наличия узлов возникают две одинаковые ошибки left_left_right_node = (6) и right_right_left_left_node = (31) .Когда я вызываю функцию, которая печатает дерево, print(m_tree.print_values(root)) присутствует Traceback (последний вызов был последним): со строками self.print_values(root.left) и self.print_values(root.right).Как я могу решить эту проблему?

class Tree:
    def __init__(self, root=None):
        self.root = root

    def print_values(self, root):
        if root != None:
            print(root.data)
            self.print_values(root.left)
            self.print_values(root.right)


class Node:
    def __init__(self, data=0, left=None, right=None):
        self.data = data
        self.left=left
        self.right=right

#Create a root node
root = Node(0)

#Create a tree with the root node
m_tree = Tree(root)


#Add a left and right node to the root
left_node = Node(3)
right_node = Node(4)
root.left = left_node
root.right = right_node

# Add left and right nodes that are present in subtree blow root.left and root.right nodes
left_left_node = Node (5)
left_left_left_node = Node (7)
left_left_right_node = (6)
right_right_node = Node (20)
right_right_left_node = Node (30)
right_right_right_node = Node (35)
right_right_right_right_node = Node (47)
right_right_left_left_node = (31)

root.left.left = left_left_node
root.right.right = right_right_node
root.left.left.left = left_left_left_node
root.left.left.right = left_left_right_node
root.right.right.left = right_right_left_node
root.right.right.right = right_right_right_node
root.right.right.right.right = right_right_right_right_node
root.right.right.left.left = right_right_left_left_node

print(m_tree.print_values(root))

Форма этого дерева должна быть:

                                                  0
                                                /    \
                                               /      \
                                             3          4
                                            /            \
                                           5              20
                                        /    \          /    \
                                       7      6        30     35
                                                      /         \
                                                    31           47   

1 Ответ

2 голосов
/ 15 марта 2019
left_left_right_node = (6)
right_right_left_left_node = (31)

Узлы должны быть объектами узла, а не целыми числами.

left_left_right_node = Node(6)
right_right_left_left_node = Node(31)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...