插入二进制搜索树

时间:2017-06-10 18:26:23

标签: python binary-search-tree

这是我想出的将新值插入BST的代码:

class BST(object):
    def __init__(self, root):
        self.root = Node(root)

    def insert(self, new_val):
        self.__internal_insert(self.root, new_val)

    def __internal_insert(self, node, new_val):
        if node is None:
            node = Node(new_val)
        elif new_val < node.value:
            self.__internal_insert(node.left, new_val)
        else:
            self.__internal_insert(node.right, new_val)

# Set up the tree
tree = BST(4)

# Insert elements
tree.insert(2)
tree.insert(1)
tree.insert(3)
tree.insert(5)

然而,在调试时我注意到self.root永远不会更新,例如:__internal_insert()方法完成并执行新的insert()时,它的兄弟节点{{ 1}}和left将返回right,而不是之前设置的值。

希望你能帮助我找出bug的位置。我最近选择了Python,如果这是一个微不足道的问题,我道歉。

2 个答案:

答案 0 :(得分:3)

您定义了node = Node(new_val),但是您在哪里将该节点附加到它的父级?

基本上,你递归,但从未捕获你正在构建的结果

尝试返回您创建的节点

def __internal_insert(self, node, new_val):
    if node is None:
        node = Node(new_val)
    elif new_val < node.value:
        node.left = self.__internal_insert(node.left, new_val)
    else:
        node.right = self.__internal_insert(node.right, new_val)
    return node 

答案 1 :(得分:2)

我发现代码存在两个问题。

首先,当您重新分配node时,它不会将值分配给BST对象。为此,您需要直接引用它:self.left = Node(new_val)

其次,您没有检查等于条件,因此您的代码不会像传统的BST那样工作。你最终会得到许多无关的节点。