当前位置: 首页 > 知识库问答 >
问题:

在二叉搜索树中查找父级?

巫马玉堂
2023-03-14

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

查找父级的想法是这样的:
1)如果值(key)不存在,则返回无,无
2)如果根等于值(key),则返回无,根
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.left 或 p.right 为“无”时,如何处理该问题?

共有1个答案

吕灿
2023-03-14

由于您的代码当前工作,您不可能转向左或右子。这是因为您的代码以

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
 类似资料:
  • 我正在研究一种寻找阳极父级的方法。我从根部开始,然后沿着叶子往下走,只要它们不是空的,不是孩子的节点。 下面是我的代码,它有点乱,因为我试着测试它看看哪里出了问题。

  • 这是家庭作业。不要只发布代码。 我需要在二进制搜索树中找到给定数据点的深度。我实现了一个<code>depth()</code>方法和一个helper方法<code>countNodes()</code>,它递归地对节点进行计数。 如果我们要搜索的数据不在树中,我需要返回< code>-1。根据我的递归,我看不出这怎么可能。

  • 我刚刚开始学习Haskell,我正在尝试编写一个代码来搜索二叉树中的特定值,如果当前返回true,否则返回false这就是我的树结构的样子 我不确定如何继续遍历树并返回值的函数。我确实尝试了BFS和DFS,但我不确定一旦得到值后如何返回。 我的函数应该是什么样子的一个例子

  • 我很难按我教授想要的格式打印出一个二叉搜索树。 他的格式是这样的: 我的代码:

  • 我试图编写一个Prolog谓词,为给定的遍历提供一个可能的二叉搜索树。我选择将树表示为,叶子就是,当子树不存在时,它的值是。 这是我到目前为止所做的(仅适用于本例中的后序遍历): 这在一个方面很好,但在另一个方面却很好: 我意识到不需要二叉搜索树,也就是说,不需要左子树中的所有节点都小于根节点,右子树中的所有节点都大于根节点,所以我还写了以下内容: 我想我可以做使Prolog只返回实际的二进制搜索

  • 二叉搜索树(BST)和二叉树(BT)中的插入有什么区别?我知道,在BST中,您将新节点的值与根进行比较,如果较小,则添加到其左侧,如果较大,则将其添加到根的右侧。BT的程序是否相同?如果没有,插入和移除的步骤是什么?