参考链接
四倍空间的原因如上图所示,但是实际操作时,我们可以直接开三倍空间也是可以的。
原因分析:
由于在分割区间时,我们计算mid使用下取整,所以左边区间大小大于等于右边区间大小,如果要实现上图中的树,极端情况下实现最多的空节点,那么节点总数必然是
3
∗
2
k
3*2^k
3∗2k次方的形式,即所有次底层中每两个节点中有一个节点为叶子结点,也就是上图中的形式。
那么次底层的节点总数为
2
n
3
\frac{2n}{3}
32n,因为所有的叶子结点数为n。次底层中的一半才占据了三分之一的叶子结点。最底层所需的节点总数(包含空节点)为
4
n
3
\frac{4n}{3}
34n。由于空节点也是需要开辟空间,所以我们总需要的节点个数为
4
n
3
∗
2
−
1
\frac{4n}{3}*2-1
34n∗2−1。也就是
8
n
3
\frac{8n}{3}
38n,小于3n。
笔者亲测,洛谷线段树题目中使用
8
n
3
\frac{8n}{3}
38n,并不会产生段溢出。