二进制搜索树 - 搜索范围

时间:2014-11-03 16:35:35

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

如果我有一个带有数字对(a,b)的二叉搜索树S,其中(a< = b);有没有一个算法可以帮助我找到S中的元素,其键值在a,b范围内([a,b])。

运行时限制为O(h + k),h是S的树高,k是范围内的元素数。

1 个答案:

答案 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