Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 在BST中查找节点删除的后续节点时,有两个答案吗?_Algorithm_Search_Data Structures_Binary Search Tree - Fatal编程技术网

Algorithm 在BST中查找节点删除的后续节点时,有两个答案吗?

Algorithm 在BST中查找节点删除的后续节点时,有两个答案吗?,algorithm,search,data-structures,binary-search-tree,Algorithm,Search,Data Structures,Binary Search Tree,以下面的BST为例: 如果我从理论上去掉根(15),我发现不同的来源给了我两种不同的方法来找到继任者 案例1:取右子级最左边的值(15的后续值=16) 案例2:取左边子项的最右边的值(15=13的前置项) 在适当的班次后,两者都返回有效的BST,但是否有更正确的答案?或者这两个答案在技术上都是正确的 对于我的算法类,我主要是从概念的角度来问这个问题,但是如果从实现的角度来看,每个方法都有任何优势,我也想知道 这两种方法之间没有区别(两种方法都是正确的,并且具有相同的复杂性),决定使用哪种方

以下面的BST为例:

如果我从理论上去掉根(15),我发现不同的来源给了我两种不同的方法来找到继任者

  • 案例1:取右子级最左边的值(15的后续值=16)
  • 案例2:取左边子项的最右边的值(15=13的前置项)
在适当的班次后,两者都返回有效的BST,但是否有更正确的答案?或者这两个答案在技术上都是正确的


对于我的算法类,我主要是从概念的角度来问这个问题,但是如果从实现的角度来看,每个方法都有任何优势,我也想知道

这两种方法之间没有区别(两种方法都是正确的,并且具有相同的复杂性),决定使用哪种方法纯粹是一种实现决策

当我们移除具有左右子树的父节点(例如15)时,为了维护BST属性(其左侧的所有节点都小于父节点,其右侧的所有节点都大于父节点),案例1和案例2(如您所述的前置节点和后继节点)是我们可以替换父节点的唯一两个节点(使所有其他节点成为父节点将无法满足BST属性)


除非你的BST有一些特殊的结构,例如,如果你的BST在左侧的节点总是较少,那么向下遍历右子树并获取最左侧的节点会更有效。但是,对于一般的BST没有区别。

我用正确的后继关系和前继关系编辑了这个问题。注:两者都很好。