簡體   English   中英

在二叉搜索樹中查找父級?

[英]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.leftp.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM