【问题标题】:Find parent in Binary Search Tree?在二叉搜索树中查找父级?
【发布时间】:2016-09-12 00:04:07
【问题描述】:

我希望在 BST 中找到具有特定值的节点的父节点。我的节点类具有左右属性项(即值/键)。

寻找父母的想法是这样的:
1)如果值(key)不存在,返回None,None
2)如果根等于值(键),则返回无,根
3) Else 找到值 (key) 并返回 (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 时,我该如何处理?

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    由于您的代码当前有效,因此您不可能转向 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
    

    【讨论】:

    • 这是一个非常巧妙的解决方案!我没想过像那样将父级初始化为 None ,这应该对我有很大帮助。
    • @Lozansky HTH。 LMK 如果代码有错字或其他问题,因为我只是将其直接写到答案中。
    猜你喜欢
    • 2016-06-07
    • 1970-01-01
    • 2011-02-05
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    • 2012-06-05
    • 2023-03-25
    相关资源
    最近更新 更多