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

搜索并删除BST前任(或后继)

邢寒
2023-03-14

如何从二叉搜索树中递归地删除给定数据的前一个(或后继)?数据可以包含在树中,也可以不包含在树中。

函数应该返回存储在前置(或后继)节点中的密钥。

共有1个答案

胡夕
2023-03-14

假设您的意思是要删除包含小于某个目标值t的最大值的节点,其中t本身不一定是树中任何节点的值,请考虑通过在BST中搜索值t可能得到的结果。有三种可能:

  1. 你找到T。这可以归结为前面的问题--您只需执行与在这种情况下相同的跟踪即可。
  2. 到达一个节点N,该节点的值大于t,并且没有左子节点。在本例中,树不包含t或t和N值之间的任何值。因此,如果有N的前一个值,则它是您要删除的前一个值,因此它再次归结为上一个问题的情况。
  3. 到达一个节点M,它的值小于t,并且没有正确的子节点。在本例中,树不包含t或M与t之间的任何值,因此M本身就是要删除的节点。
 类似资料:
  • 删除操作是二叉搜索树中最复杂的操作,因为它需要考虑几种可能性: 删除的节点是叶节点 删除的节点只有一个子节点 删除的节点同时具有左子节点和右子节点 前两种情况很简单。但是对于第二个,我读了很多书或文档,解决方案是:在正确的子树中找到最小值并将其替换为已删除的节点。然后从右侧子树中删除它。 我可以完全理解这个解决方案。 事实上,一般情况下,右边子树中最小值的节点称为该节点的后继节点。所以上面的解决方

  • 问题内容: 我有一个会话变量,其中包含带有值的深层json对象: 例如,我想找到带有“ Piranha the Fish”的行,然后将其删除(并再次对其进行json_encode)。这该怎么做?我想我需要在结果数组中搜索并找到要删除的父键,但是我还是被卡住了。 问题答案: 会将JSON对象转换为由嵌套数组组成的PHP结构。然后,您只需要遍历它们和不需要的一个即可。

  • 我想从文件。 示例: 我想给我们一种动态命令,因为我不必每次为每个用户手动输入。 我试过了 但这并没有达到预期的效果。

  • 编写一个函数,如果给定的二叉搜索树包含给定的值,则返回1,否则返回0。 例如,对于以下树: N1(值:1,左:null,右:null) n2(值:2,左:n1,右:n3) N3(值:3,左:null,右:null) 对contains(&n2,3)的调用应返回1,因为根位于n2的树包含编号3。 函数应该返回1,然而,它返回0或者根本不返回。

  • 在二元搜索树的情况下,为什么我们不能简单地在一个节点有两个子节点的情况下,将一个节点的前一个节点替换为后一个节点?

  • 假设我有一个二元搜索树,其中我应该按照标准输入中给定的顺序插入N个唯一编号的键,然后我要删除所有键间隔为I=[最小,最大]的节点,以及与这些节点相邻的所有连接。这给了我很多较小的树,我要以一种特殊的方式将它们合并在一起。更精确地描述问题: 给定包含不同键的BST和间隔I,间隔删除分两个阶段进行。在第一阶段,它将删除关键帧位于I中的所有节点以及与已删除节点相邻的所有边。让生成的图包含k个连通分量T1

  • 我试着删除二叉查找树的节点,当我打印出来的时候,我得到的结果实际上不是这个删除,实际上可以删除二叉树本身的任何键。 我是二进制搜索树的新手。有人能帮我写代码吗?我们将感谢您的帮助。 谢谢 完整代码

  • 我有一个二进制搜索树,它的每个节点都有两个值。 所以它的节点是这样的。 我已经根据节点的“name”变量的升序在BST中插入了值。所以树的顺序遍历将按“name”的升序返回节点。 现在我想根据“值”变量的升序显示树节点。无需更改原始树。哪种算法/方法对此最有效?