在python中从二进制序列创建二叉树

时间:2012-07-22 20:43:47

标签: python tree binary-tree

我试图从二进制序列二进制创建一个树,如“100101” 然后我想要像这样创建树。 (基本上1表示向右移动,0表示向左移动)

                                <Root node>
                                    |
                                    1
                                   /
                                  0
                                 /
                                0
                                 \
                                  1
                                 /
                                0
                                 \
                                  1

所以我在这里做的是代码: 其中值为字符串序列(ex value =“1001”)

def _inserto(root,value):
    for i in value:
        if root == None:
            root = BSTNode(i)
            current = root
        elif i == "1":
            if current.right is not None:
                current.right = BSTNode(i)
                current = current.right
            else:
                current.right = BSTNode(i)
                current = current.right
        elif i == "0":
            if (current.left is not None):
                current.left = BSTNode(i)
                current = current.left
            else:
                current.left =BSTNode(i)
                current = current.left
    return root

现在的问题是,如果我想输入另一个像“01”这样的序列,树应该看起来像这样

                            <Root Node>
                                |
                                1
                               /
                              0
                             / \
                            0   1
                             \
                              1
                             /
                            0
                             \
                              1

,但我真的很难过,因为我的功能是要覆盖旧树。

1 个答案:

答案 0 :(得分:2)

问题在于处理现有节点的代码。如果存在,代码将使用新的BSTNode覆盖它,从而丢失其下的所有现有节点。你需要的是:

    elif i == "1":
        if current.right is None:
            current.right = BSTNode(i)
        current = current.right
    elif i == "0":
        if root.left is None:
            current.left = BSTNode(i)
        current = current.left

如果没有已存在的节点,则仅分配节点,然后将当前设置为此新节点。