如何扩张数据结构
1) 选择基础数据结构
2) 确定要在基础数据结构中记录得附加信息
3) 提供基本(内部)操作来维护附加信息
4) 设计新得接口
1 是一颗红黑树
2 是以区间左端点维护的红黑树
3 额外信息是在每个节点中, 保存了以该节点为根的树中的最右的区间端点
个人说明:
1) 算法是正确的,可以正确返回与指定区间重叠的区间
2) 该算法只返回与i有重叠得一个区间, 并不是所有的区间
3) 该算法应该是非常容易错的。 若把其中的语句修改一下, 算法就错了。
算法导论中文版pdf中有细微描述是有问题的
根本原因是该区间树是以左端点递增有序的方式构建的红黑树(二叉排序树)。
interval_insert, interval_delete 待补充
interval_insert很简单, 只需要注意更新upper就行
interval_delete 需要回溯, 而且需要精确判断两个区间是否相同, 相同才能delete ?
// 找到x的前驱或者后继替换x 【二叉树的删除操作】
// 只需要修改该路径上的upper