给定k_1和k_2,在O(h)中找到BST k_1> = k <= k_2的范围
当h为高度且n为节点数时,我尝试使用O(h + n)编写代码。
Algorithm countRange(Node root, int k1, int k2)
{
if(root = null) return 0;
if(root.value >= k1 && root.value <= k2)
return 1 + countRange(root.left, k1, k2) + countRange(root.right,k1,k2);
else if(root.value < low)
return countRange(root.right, k1, k2);
else
return countRange(root.left, k1, k2);
例如:
a[] = [1,2,3,4,5,6,7,8,9,10]
以数组形式
countRange(4,8) = 5; // 4,5,6,7,8
如果有任何办法我们可以在O(h)次内完成该任务>作业中给出的提示是使用每个节点的大小,这是每个节点具有的后代节点。
例如
8 <- size is 7
6 10 <- size is 3
4 7 9 18 <- size is 1
答案 0 :(得分:0)
一个主意:
20
/ \
10 21
/ \ \
/ \ \
2 17 22
/ \ \
1 6 19
/ / \ /
0 4 7 18
/ \
3 5
让我们在该树中搜索[4,18]。