正如问题所述,我正在尝试找到一种算法来在平衡二叉搜索树中找到关键'k'的后继。我认为平衡的BST与AVL树相同(如果我错了,请纠正我)。我希望我能在O(log n)时间内一次完成这个,但是我发现的一切都说我需要从树的右侧,然后是左侧。我是整个树木的新手,仍然觉得有点混乱。任何帮助将不胜感激!
感谢。
答案 0 :(得分:1)
在二叉搜索树中,您有两个路径选项: left 或 right 。 现在假设我们在节点 N 中有一个元素 k 。我们想要找到 k 的后继者,它是树中最小的元素,大于 k 。
这里有3个用例:
从 S = 父(P)开始:当 S ≠Root AND P≠左(S)的
如果 S = Root且 P = Right(S),则 k 是最大元素树...否则,只需在设置 S←右(S)后执行以下循环:
S ≠NULL:
当这个循环结束时, P 持有 k 的继承者。
答案 1 :(得分:0)
如果具有密钥k的节点具有右子树,则它是该子树中最左边的节点。 否则,如果具有密钥k的节点是左子节点,则它是该节点的父节点。 否则,找到节点的最近祖先,而不是其具有右子树的直接父节点,它是该子树中最左边的节点。如果不存在这样的祖先,则该节点是最大的并且没有后继。
由于树是平衡的,您总是可以在O(log n)中找到它。