[英]Find parent in Binary Search Tree?
我希望找到BST中具有特定值的節點的父節點。 我的節點類有左邊和右邊的屬性項(即值/鍵)。
找到父母的想法是這樣的:
1)如果值(鍵)不存在,則返回None,None
2)如果root等於值(key),則返回None,root
3)否則找到值(鍵)並返回(par,node)其中par是父節點和節點
我的功能看起來像這樣:
def findpar(self,key):
if not self._exists(key):
return None,None
elif self.root.item==key:
return None, self.root
p=self.root
found=False
while not found:
if p.left.item==key:
return p, p.left
found=True
elif p.right.item==key:
return p, p.right
found=True
elif p.item<key:
p=p.left
elif p.item>key:
p=p.right
當p.left
或p.right
為None時,如何處理該問題?
由於您的代碼目前有效,因此您無法轉向None
左或右孩子。 這是因為您的代碼以
if not self._exists(key):
return None,None
所以key
必須存在,如果它必須存在,它必須存在於搜索路徑上。
應該注意的是,你有效地執行了兩次搜索,但這並不是那么有效。 相反,你可以嘗試這樣的事情:
def findpar(self,key):
parent, node = None, self.root
while True:
if node is None:
return (None, None)
if node.item == key:
return (parent, node)
parent, node = node, node.left if key < node.item else node, node.right
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.