打印二叉搜索树插入的结果
我本来期待能看到根节点的值,也就是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
改成返回根节点,那样看起来就没什么用处了。