我正在学习二进制搜索树,我不明白为什么这段代码不能用于插入二进制搜索树:
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)
答案 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.left
或node.right
之后,您就会为其分配None
。而你想要
if data < node.data:
self.insert(data, node.left)
else:
self.insert(data, node.right)