新手插入二叉树检查

时间:2013-12-02 04:06:18

标签: python insert binary-search-tree

我正在学习二进制搜索树,我不明白为什么这段代码不能用于插入二进制搜索树:

def insert(self, data, node):
    node_to_insert = Node(data)

    if node is None:
        node = node_to_insert
    else:
        if data < node.data:
            node.left = self.insert(data, node.left)
        else:
            node.right = self.insert(data, node.right)

我知道这段代码有效:

    def insert(self, data, node):
        node_to_insert = Node(data)

        if node is None:
            node = node_to_insert
        else:
            if data < node.data:
                if node.left is None:
                    node.left = node_to_insert
                else:
                    self.insert(data, node.left)
            else:
                if node.right is None:
                    node.right = node_to_insert
                else:
                    self.insert(data, node.right)

我看到的方式是,当函数被调用时,应该进行额外的is None检查吗?

为什么这也有效:

def print_inorder(self, node):
    if node is not None:
        self.print_inorder(node.left)
        print node.data
        self.print_inorder(node.right)

在调用node.left is None

之前没有额外检查以查看是否self.print_inorder(node.left)

1 个答案:

答案 0 :(得分:0)

在您的代码中:

if data < node.data:
    node.left = self.insert(data, node.left)
else:
    node.right = self.insert(data, node.right)

您的方法self.insert会返回None,因此在将数据正确插入node.leftnode.right之后,您就会为其分配None。而你想要

if data < node.data:
    self.insert(data, node.left)
else:
    self.insert(data, node.right)