python - 在二叉搜索树中找到父级?

标签 python python-3.x

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

寻找 parent 的想法是这样的:
1)如果value(key)不存在,则返回None,None
2)如果root等于值(key)则返回None,root
3)否则找到值(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时,如何处理问题?

最佳答案

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

关于python - 在二叉搜索树中找到父级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39437745/

相关文章:

python - 所选行的值 > X 的列名称列表

python-3.x - _tkinter.TclError : couldn't connect to display "localhost:10.0" when using wordcloud

没有本地工作目录的 Github 远程仓库上的 Python 更新文件

python - 无需 root 权限即可在 Python 中 Ping 服务器

python - flake8 e999 在 python2 中使用 fstrings (使用 future_fstrings)

python-3.x - 如何在 python 中打印 __init__ 函数参数?

python - 尝试将二进制转换为十进制: ended with a weird int error?

python - 如何处理 aiohttp 响应中的表单数据

python - Kivy Filechooser 在屏幕上滚动重叠文本

python - 使用 None 作为 itertools.accumulate 的初始值