繁体   English   中英

插入二叉搜索树

[英]Insertion into a 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()执行,其兄弟节点leftright是回None ,而不是以前的设定的值。

希望您能帮助我找出错误所在。 我最近选择了Python,如果这是一个琐碎的问题,我深表歉意。

您定义了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 

我看到代码有两个问题。

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

其次,您无需检查equals条件,因此您的代码不会像传统的BST那样工作。 您最终会得到很多无关的节点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM