介绍
线段树(Segment Tree)是一种二叉树形数据结构,用以存储区间或线段,并且允许快速查询结构内包含某一点的所有区间。
- 线段树是一棵高度平衡的二叉树,有可能是满二叉树或者完全二叉树,但这不是必要条件
- 线段树的每一个结点都代表一个区间。父结点所代表的区间是两个子结点的融合。兄弟结点所代表的区间相互不重叠。根结点代表整个区间。
- 叶子节点对应原始数组中的元素
- 线段树不考虑添加元素,即区间固定。跟堆一样用数组表示,如果给定原生区间数组有n个元素,那么这个线段树的数组表示需要4n的空间
一个包含 n 个区间的线段树,空间复杂度为 O(n),查询的时间复杂度则为 O(logn+k),其中 k 是符合条件的区间数量。一颗线段树的构造就是根据区间的性质来构造的
代码
1 |
|