将数组逐项插入二叉树[PYTHON]

时间:2017-04-11 18:13:45

标签: python arrays tree binary-tree

我有一个数组= [1,2,3,4,5,6,7],我希望逐项将所有元素插入到二进制树中,所以它看起来像这样:

            1
          /   \
         2     3
        / \   / \
       4   5 6   7

我有类Node(代表每个节点):

class Node(self):
    def __init__(self):
        self.value= 0
        self.parent = None
        self.left = None
        self.right = None

和类Tree(代表树本身):

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

现在我需要创建一个以数组作为参数的函数,并按上述方式生成二叉树。

我管理过这个:

def insert(array):
    size = len(array)
    tree = Tree()
    insert_node(tree.root, array, 0, size-1)

def insert_node(tree, array, index, size):
    node = Node()
    if index < size:
        node.value = array[index]
        insert_node(node.left, array, index*2 +1, size)
        insert_node(node.right, array, index*2 +2, size)
    tree = node

我认为这样的事情可行,但我不知道如何设置父母&#39;属性正确以及如何将节点分配给树。

感谢您的任何建议

2 个答案:

答案 0 :(得分:1)

您无法从tree内部分配到insert_node。好吧,你可以,但它不会改变论点。

相反,您应该insert_node返回它创建的Node,这样调用者就可以将它放在需要的位置。这将解决您的父分配和树分配问题,假设您在每个时间分配从insert_node 返回的值。

答案 1 :(得分:-1)

 def insert(array):
        size = len(array)
        tree = Tree()
        tree.root = insert_node(tree.root, array, 0, size-1)
        print(PreOrder(tree.root))


def insert_node(tree, array, index, size):
    node = Node()
    if index < size:
        node.value = array[index]
       node.left = insert_node(node.left, array, index*2 +1, size)
       node.right= insert_node(node.right, array, index*2 +2, size
    return node
def PreOrder(self):
    if self is not None:
        print(self.key)
        PreOrder(self.left)
        PreOrder(self.right)

返回:

0
None