【问题标题】:Insert array into binary tree item-by-item [PYTHON]将数组逐项插入二叉树 [PYTHON]
【发布时间】:2017-04-11 18:13:45
【问题描述】:

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

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

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

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

我认为类似的方法可以工作,但我不知道如何正确设置“父”属性以及如何将节点分配给树。

感谢您的建议

【问题讨论】:

    标签: python arrays tree binary-tree


    【解决方案1】:

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

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

    【讨论】:

    • 所以你建议打电话给insert_node,比如tree.root = insert_node(tree.root, array, 0, size-1),而insert_node():... return node
    • 还有其他的方式来解释我写的内容吗?
    • 好吧,我尝试使用 in_order 打印结果树。它真的没有返回我所期望的。
    • 既没有看到你的代码,也没有看到你所期望的,也没有看到你得到的,我猜你是靠自己的。
    • 糟糕,很抱歉,我完全忘记了。我在下面添加代码。
    【解决方案2】:
     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
    

    【讨论】:

    • 这不是答案。
    • 确实如此。这就是你给我的建议。
    • 可能是这样的? (我编辑了上面的代码)它返回不同的值。但仍然不正确。或者更确切地说是这样的: return insert_node(node.left, array, index*2 +1, size)
    猜你喜欢
    • 2015-02-13
    • 2019-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    • 2022-01-14
    • 1970-01-01
    相关资源
    最近更新 更多