在BST中找到节点删除的后继者时,可以有两个答案吗?

时间:2018-04-17 20:05:38

标签: algorithm search data-structures binary-search-tree

以下面的BST为例:

Example BST

如果我理论上删除了根(15),我发现不同的来源给了我两种不同的方法来找到继承者。

  • 案例1:取右孩子的最左边的值(15的继承人= 16)
  • 案例2:取左孩子的最右边的值(前身15 = 13)

两次都在适当的班次后返回有效的BST,但是有更正确的答案吗?或者这两个答案在技术上是否正确?

我从我的算法课的主要概念角度提出这个问题,但是如果从实现的角度来看每个方法都有任何优势,我很想知道还有!

1 个答案:

答案 0 :(得分:2)

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

当我们删除具有左右子树的父节点(例如15)时,为了保持BST属性(左边的所有节点都小于父节点,右边的所有节点都大于父级),案例1和案例2(如前所述,前任和后继者)是我们可以替换父级的唯一两个节点(使父级的所有其他节点都无法满足BST属性)。

除非您的BST有一些特殊的结构,例如如果您的BST在左侧总是拥有较少的节点,而不是遍历右侧子树并获得最左侧的节点将更有效。但是,一般BST没有区别。