[英]Newbie inserting into binary tree checks
我正在學習二進制搜索樹,但我不明白為什么此代碼無法插入到二進制搜索樹中:
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)
如果在調用self.print_inorder(node.left)
之前node.left is None
額外的檢查來查看node.left is None
在您的代碼中:
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.