无法在平衡二叉搜索树中找到密钥的后继

时间:2013-10-30 18:19:23

标签: algorithm binary-search-tree

正如问题所述,我正在尝试找到一种算法来在平衡二叉搜索树中找到关键'k'的后继。我认为平衡的BST与AVL树相同(如果我错了,请纠正我)。我希望我能在O(log n)时间内一次完成这个,但是我发现的一切都说我需要从树的右侧,然后是左侧。我是整个树木的新手,仍然觉得有点混乱。任何帮助将不胜感激!

感谢。

2 个答案:

答案 0 :(得分:1)

在二叉搜索树中,您有两个路径选项: left right 。 现在假设我们在节点 N 中有一个元素 k 。我们想要找到 k 的后继者,它是树中最小的元素,大于 k

这里有3个用例:

  • N 有一个非NULL 子项: right 子树的最左边元素是 k '继任者。
  • N 没有这样的孩子,并且是其父 P <的 子女/ em>的。在这种情况下, P 保存 k 的后继。
  • 最后, N 是其父 P 子项。然后,要找到它的后继者,你必须遵循下面显示的更详细的程序......

S = 父(P)开始:当 S ≠Root AND P≠左(S)

  1. P←S
  2. S←父母(S)
  3. 如果 S = Root且 P = Right(S),则 k 是最大元素树...否则,只需在设置 S←右(S)后执行以下循环:

    S ≠NULL:

    1. P←S
    2. S←左(S)
    3. 当这个循环结束时, P 持有 k 的继承者。

答案 1 :(得分:0)

如果具有密钥k的节点具有右子树,则它是该子树中最左边的节点。 否则,如果具有密钥k的节点是左子节点,则它是该节点的父节点。 否则,找到节点的最近祖先,而不是其具有右子树的直接父节点,它是该子树中最左边的节点。如果不存在这样的祖先,则该节点是最大的并且没有后继。

由于树是平衡的,您总是可以在O(log n)中找到它。