【问题标题】:When finding a successor for a node deletion in a BST, can there two answers?在 BST 中寻找节点删除的后继者时,可以有两个答案吗?
【发布时间】:2018-04-17 20:05:37
【问题描述】:

以下面的 BST 为例:

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

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

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

我主要从我的算法类的概念角度提出这个问题,但如果从实现的角度来看每种方法有什么优势,我也很想知道!

【问题讨论】:

  • 我用正确的继任者和前任者关系编辑了问题。注意:两者都很好。

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


【解决方案1】:

两者没有区别(两种方法都是正确的,复杂度相同),决定使用哪种方法纯粹是一个实现决定。

当我们删除具有左右子树的父节点(例如 15)时,为了保持 BST 属性(其左侧的所有节点都小于父节点,并且其右侧的所有节点都大于父节点)父节点),案例 1 和案例 2(您提到的前任和继任者)是我们可以替换父节点的仅有的两个节点(使所有其他节点成为父节点将无法满足 BST 属性)。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多