【问题标题】:Why is the successor of a BST node defined as the one larger than the deleted one?为什么 BST 节点的后继节点定义为比删除节点大的节点?
【发布时间】:2020-02-04 14:43:05
【问题描述】:

在下图中,如果我在12的右边加上14,那么14可以代替15而不影响其他节点,就像正确答案16一样。为什么后继被定义为使用大一点的数字不是比它更小的那个吗?

【问题讨论】:

  • 嗯,“继任者”意味着它在之后,而不是之前。但是您也可以在删除时移动前任;除非您将 BST 用作最小优先级队列,在这种情况下,您要删除的节点永远不会有前任。您可能更喜欢移动一个或另一个,这取决于哪个会使树更平衡,但您通常需要重新平衡任何一种方式。
  • 它的顺序继承者。这是一种方法。你也可以使用前任
  • 原始树中的 14 在哪里?它不在那里。如何将 15 替换为 14?
  • 如果对您有帮助,请考虑接受答案。

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


【解决方案1】:

嗯,就语言而言,successor 是紧随其后的,暗示它必须更大。

在删除算法方面,可以同时使用后继和前任来替换被删除的节点。

Successor:是被删除节点右子树中最小的节点,也就是说它是比被删除节点大的最小节点,所以你保证,如果你用它替换被删除节点,它仍然比右子树中的所有其他节点都小,因此不会破坏任何属性。

Predecessor:是被删除节点左子树中最大的节点,也就是说它是小于被删除节点的最大节点,所以你保证,如果你用它替换被删除节点,它仍然会比左子树中的所有其他节点都大,因此不会破坏任何属性。

简而言之,你可以使用后继或前任没有任何问题,不是定义的问题,只是选择的问题。

【讨论】:

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