14.3-1
在CLRS 13.2节中的LEFT-ROTATE
最后添加两行代码:
y.max = x.max
x.max = max(α.max,β.max,x.int.high)
14.3-2
将书上的INTERVAL-SEARCH
第三行的if
语句中的 ≥ 改为 > 即可。
14.3-3
对于INTERVAL-SEARCH
,首先检查区间
MIN-INTERVAL-SEARCH(T, i)
return MIN-INTERVAL-SEARCH-FROM(T, T.root, i)
MIN-INTERVAL-SEARCH-FROM(T, x, i)
if x.left ≠ T.nil and x.left.max ≥ i.low
y = MIN-INTERVAL-SEARCH-FROM(T, x.left, i)
if y ≠ T.nil
return y
elseif i overlaps x.int
return x
else return T.nil
elseif i overlaps x.int
return x
else return MIN-INTERVAL-SEARCH-FROM(T, x.right; i)
时间复杂度是 O(lgn) 。
14.3-4
INTERVAL-OVERLAP-LIST(T, x, i)
if i overlaps x.int
print x
if x.left != T.nil and x.left.max ≥ i.low
INTERVAL-OVERLAP-LIST(T, x.left, i)
if x.int.low ≤ i.high and x.right != T.nil and x.right.max ≥ i.low
INTERVAL-OVERLAP-LIST(T, x.right, i)
14.3-5
先找到和区间 i 的低端点相等的区间(由于低端点是关键字),再比较找到的这个区间的高端点和区间
INTERVAL-SEARCH-EXACTLY(T, i)
x = SEARCH(T, i.low) //普通红黑树查找
if x.high == i.high
return x
return T.nil
14.3-6
1、基础数据结构
以集合中的数据作为关键字的红黑树。SEARCH
和普通红黑树的TREE-SEARCH
一样。
2、附加信息
每个结点 x 的扩张属性如下: