打印二叉搜索树插入的结果

0 投票
2 回答
39 浏览
提问于 2025-04-14 16:24

我本来期待能看到根节点的值,也就是6被打印出来。但是输出却是None。下面是代码:

class TreeNode:
    def __init__(self, key):
        self.key = key
        self.left = None
        self.right = None

    def __str__(self):
        return str(self.key)


class BinarySearchTree:
    def __init__(self):
        self.root = None

    def insert(self,key):
        self.root = self._insert(self.root, key)

    def _insert(self, node, key):
        if node is None:
            return TreeNode(key)

        if key < node.key:
            node.left = self._insert(node.left, key)

        elif key > node.key:
            node.right = self._insert(node.right, key)

        return node


tree = BinarySearchTree()

tree.insert(6)

print(tree.insert(8))

输出:None

我试着把 return node 改成 print(node),还把 print(tree.insert(8)) 改成 tree.insert(8)。改完之后,输出的确打印出了6。但是回到原来的代码,我还是搞不明白为什么输出是None,而不是6,尽管我花了好几个小时在思考这个问题。

2 个回答

0

你在调用 print(tree.insert(8)) 时得到 None 的原因是,因为 insert 方法在没有明确返回一个新节点的时候,会返回 None。当你调用 tree.insert(8) 时,这个方法是用来插入数据的,但它没有特别返回任何东西,所以就返回了 None。因此,当你打印 tree.insert(8) 的结果时,就会看到 None。不过,当你遍历这个树的时候,6 和 8 会被打印出来。

tree = BinarySearchTree()

tree.insert(6)

tree.insert(8)

0

虽然你的 _insert 方法返回了一个节点,但你的 insert 方法并没有返回任何东西,所以它默认返回 None

简单来说,你不应该去打印 insert 的返回值,并且要接受它返回 None 这一点:其实这是一件 事。如果你把 insert 改成返回根节点,那样看起来就没什么用处了。

撰写回答