【问题标题】:deleting multiple node in BST changes the resulting tree?在 BST 中删除多个节点会改变结果树?
【发布时间】:2015-09-07 13:52:53
【问题描述】:

如果我需要在 BST 中删除多个节点,生成的树是否会改变删除顺序?会保留正常的左右顺序,但我不确定树结构。

这是一个“哲学”问题,我需要对其进行说明或反例。

【问题讨论】:

    标签: binary-search-tree


    【解决方案1】:

    Deleting 1 and 2 in different order results in two different trees反例: 删除 1 和 2 的顺序导致不同的 BST。 因为当你一开始想删除 2 时,你必须找到它的下一个元素 右子树,也就是3,用2代替,但是当你先删除1,然后想删除2时,现在它只有一个孩子,简单地用它的孩子替换它,即4。 所以结果是两棵不同的树。

    【讨论】:

      【解决方案2】:

      为了证明删除的顺序对最终的树没有影响,证明任意两个删除操作是可交换的(即如果它们的顺序颠倒它们具有相同的效果)是必要且充分的。

      删除节点的影响仅限于该节点及其作为根的子树。因此,如果两个节点是分开的(即两个节点都不在另一个节点之下),那么它们的删除就会通勤。所以唯一感兴趣的案例在另一个的子树中有一个节点。

      不失一般性,假设我们使用这样的规则:当我们删除一个有两个孩子的节点时,我们用它的后继节点替换它。我们将较高的称为A,较低的称为B。如果B在A的左子树中,则删除可交换,因为删除A对A的左子树没有影响,而删除B也没有影响在 A 的左子树之外。所以唯一感兴趣的情况是当 B 在 A 的右子树中时。

      删除 A 后,对 A 的右子树的影响与删除 A 的后继树相同。假设B 不是 A 的继任者;我们将调用 A 的后继者 C。删除 A 包括从右子树中删除 C 并将 A 替换为 C(可交换),因此如果删除 B 和 C 可交换,则删除 A 和B 通勤。通过归纳,如果任何一对删除不可以交换,那么 A 和 B 的删除(其中 B 是 A 的后继者)不可以交换。

      但是通过检查删除 A 及其后继者确实可以通勤。 Q.E.D.

      【讨论】:

      • 和 +1 用于归纳演示。
      • @SarahStrand:虽然我很不愿意承认,但我的回答并不完整。我的证明取决于删除方法的特定选择,并且还有其他(合法的)方法可以使删除总是通勤。 所以正确答案是“视情况而定”。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-11
      • 2021-04-06
      • 1970-01-01
      • 2021-05-24
      • 2014-05-26
      相关资源
      最近更新 更多