参考:https://en.wikipedia.org/wiki/Interval_tree
百度很多关于interval tree和segment tree的感觉都有问题,于是去Wikipedia查了一下interval tree,在这里总结一下。
线段树用来索引线段,比如时间段[1,10], [3,7], [20,30],主要支持点查询,比如查找时间点4,会查出[1,10]和[3,7],范围查询会附加用一颗独立的树形结构如B+树辅助查询。
有两种interval tree的实现,这里介绍其中一种 Centered interval tree
Centered interval tree
1 整体介绍
Centered interval tree 是一颗三叉树,专门用来应对点查询。
给定 n 个线段,用 Ts 和 Te 表示起点和终点。首先确定一个中心点,中心点会把所有线段分成三部分:
- a:Te 比 中心点 小的线段集合。
- b:中心点 落在[Ts,Te]中间的线段。
- c:Ts 比 中心点 大的线段。
a 为当前节点,b 为 a 的左子树,c 为 a 的右子树。树的整体构造过程就是这样,中心点的选择尽量使树平衡。
2 当前节点构造过程
当前节点维护五个信息:
- 1:中心点的值
- 2:指向