线段树存储N个节点
(1)假设线段树要存储的节点个数是
N
=
2
k
N = 2^k
N=2k 如
N
=
4
N=4
N=4,那么一定是满二叉树。又因为线段树的性质其叶子节点数一定是n个。那么此时的满二叉树总节点个数为
N
+
N
/
2
+
N
/
4...
+
1
=
2
N
−
1
N + N/2 + N/4 ... +1 = 2N-1
N+N/2+N/4...+1=2N−1
(2)如果节点个数不是
N
=
2
k
N=2^k
N=2k 如
N
=
5
N=5
N=5,树不一定是满二叉树,所以最后一层一定填不满。最坏情况下,最后一层的叶子节点在最右边。
(3) 对于前面的满二叉树,如果要再多开一层,需要多开的空间是 原有节点的个数*2 + 1(满二叉树的性质),我们原有
2
N
−
1
2N-1
2N−1个节点,现在需要开到
4
N
−
1
4N-1
4N−1了。
注意 对于节点数为4的个数,要让空间足够多一层,要开到 4 N − 1 4N-1 4N−1 ,但是对于 N = 5 , 6 , 7 N = 5 ,6, 7 N=5,6,7 而言,开到 4 ∗ 4 − 1 4*4 -1 4∗4−1就够了,但是在平时不计较点内存,所以统一开到 4 N 4N 4N