为什么将BST节点的后继节点定义为比已删除的节点大?

时间:2020-02-04 14:43:05

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

在下图中,如果我在12的右边添加14,则14可以替换15而又不影响其他节点,就像正确答案16一样。为什么将后继定义为使用更大的数字而不是比它小一点? enter image description here

1 个答案:

答案 0 :(得分:0)

就语言而言,successor是紧随其后的语言,这意味着它必须更大。

就删除算法而言,您可以同时使用后继者和前任者来替换已删除的节点。

Successor:是已删除节点右子树中的最小节点,这意味着它是大于已删除节点的最小节点,因此,如果将已删除节点替换为,则可以保证它仍然比右子树中的每个其他节点都要小,因此不会破坏任何属性。

Predecessor:是已删除节点左子树中的最大节点,这意味着它是小于已删除节点的最大节点,因此,如果将已删除节点替换为,则可以保证它仍然比左侧子树中的所有其他节点大,因此不会破坏任何属性。

简而言之,您可以毫无问题地使用后继者或前任者,这不是定义问题,只是选择问题。