“区间树存储的是一组几何区间并回答 stabbing/intersection 查询,不能与“把数组区间递归分解”的本页结构同名互换。”
选定版本与端点约定 ​
“Interval tree”有多种结构。本页选 centered interval tree,并固定闭区间
树节点有中心值
以下动态保证假设可能出现的端点坐标集预先已知,据此建立高度
Stabbing Query ​
查询点
- 若
,扫描按 low 递增的列表,报告所有 ,遇首个 停止;这些区间都含 ,故无需再检查 high。随后只递归左子树。 - 若
,对按 high 递减列表对称扫描至 ,随后只递归右子树。 - 若
,节点存放的全部区间都命中,子树不可能含 。
搜索只走一条高度
区间交叠查询 ​
查询闭区间
若
日程冲突真例 ​
活动区间为
查询新会议
删除其中一个
与 max-high 增强 BST 的区分 ​
另一经典结构按 low 建红黑树,并在节点保存子树最大 high。它能最坏
要报告全部命中,必须使用相应递归剪枝并单独证明输出敏感界;不能从“一次命中
与 Segment Tree 的区分 ​
线段树递归分解坐标域或数组索引,一个输入区间可能覆盖多个规范节点,常用于区间聚合和批量更新。Centered interval tree 递归分配区间对象,每个对象归属一个包含其中心的节点,查询输出对象实例。
两者名称都含“区间/segment”,但空间不变量、更新方式和查询接口不同。旋转矩形、二维任意区域与最近邻也不属于一维 interval tree。
参考资料
- Herbert Edelsbrunner, Dynamic Data Structures for Orthogonal Intersection Queries, Technical University of Graz, 1980.
- Mark de Berg et al., Computational Geometry: Algorithms and Applications, 3rd ed., Springer, 2008.
- Thomas H. Cormen et al., Introduction to Algorithms, 4th ed., MIT Press, 2022, Section 14.3, for the augmented-BST interval-tree variant.