CLRS 14.3区间树

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,首先检查区间 x 是否和被查询区间 i 重叠,如果不重叠,要么转向左子树要么转向右子树。若区间重叠, 并且是右子树的区间和区间 i 重叠,由于关键字是低端点,我们返回的就是最小低端点区间;但若是有左子树区间和区间 i 重叠,返回的就有可能不是最小低端点区间。所以需要先检查是否有左子树区间和区间 i 重叠。

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 的低端点相等的区间(由于低端点是关键字),再比较找到的这个区间的高端点和区间 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 的扩张属性如下:
x.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值