二叉搜索树插入操作打印异常:输出None而非预期根节点6
为什么调用tree.insert(8)并打印会输出None?
问题根源
你当前的BinarySearchTree.insert方法没有返回值。Python中,没有显式return语句的函数默认返回None,所以当你执行print(tree.insert(8))时,本质是打印这个方法的返回值,自然得到None。
代码细节分析
_insert方法是有返回值的:它在每次递归结束后返回当前节点(新创建的节点或者更新后的父节点)。- 但
insert方法只是把_insert的返回值赋值给了self.root,并没有将这个值返回出去。也就是说,insert方法完成插入操作后,没有任何返回内容,默认返回None。
正确的解决方案
如果你想打印根节点的值,有两种合理的方式:
方式1:修改insert方法,让它返回根节点
修改insert方法,添加返回语句:
def insert(self, key): self.root = self._insert(self.root, key) return self.root # 返回更新后的根节点
此时执行print(tree.insert(8)),就会输出根节点的6(因为插入8不会改变根节点)。
方式2:插入后单独打印根节点
不需要修改方法,直接在插入操作后访问tree.root并打印:
tree.insert(8) print(tree.root)
关于你之前的修改
你把_insert里的return node改成print(node),虽然能输出6,但这是错误的做法:
_insert的核心作用是返回节点,用于更新父节点的左/右子树引用,改成print(node)会破坏二叉树的插入逻辑,后续插入其他节点可能出现异常。- 当时能输出
6,只是因为递归到根节点时执行了print(node),但这并非正确的实现方式。
内容的提问来源于stack exchange,提问作者Jin
相关产品推荐
相关产品推荐

