如果我有一个带有数字对(a,b)的二叉搜索树S,其中(a< = b);有没有一个算法可以帮助我找到S中的元素,其键值在a,b范围内([a,b])。
运行时限制为O(h + k),h是S的树高,k是范围内的元素数。
答案 0 :(得分:2)
经典答案来自"算法导论": http://staff.ustc.edu.cn/~csli/graduate/algorithms/book6/chap14.htm
步骤1:使用正常的二叉树查找找到a。
步骤2:迭代调用树继承,直到找到b。树继承者为您提供树中的下一个项目:
TREE-SUCCESSOR(x)
if right[x] ≠ NIL
then return TREE-MINIMUM (right[x])
y ← p[x]
while y ≠ NIL and x = right[y]
do x ← y
y ← p[y]
return y
TREE-MINIMUM (x)
while left[x] ≠ NIL
do x ← left[x]
return x