关于N个元素需要4N的空间,为什么不是2N?

来源:1-2 线段树基础表示

xiaobai00000

2021-05-11 12:50:50

​按照满二叉树计算(最大值的计算),N个元素 的最后一层(拆到最小粒度) 应该是 N个叶子节点,又因为N层(最后一层)的节点个数  相当于 前(N-1)层的节点个数总和, 所以 S(n-1) 也是N,  加上最后一层的N, 应该是2N的空间啊。

写回答

1回答

liuyubobobo

2021-05-11

关键是由于我们使用数组表示这棵二叉树,所以,这棵二叉树必须是完全二叉树。最后一层没有元素的地方会浪费空间。


以 6 个节点为例(1, 2, 3, 4, 5,6)。得到的二叉树是这个样子的。


            O
/ \
O O
/ \ / \
O 3 O 6
/ \ / \ / \
1 2 X X 4 5


注意两个 X 的地方,他们是占空间的,虽然我们的算法不会访问这里,但是,为了访问 4, 5 两个节点,X 所在的空间只能浪费。因此,这棵有 6 个叶子节点的树,使用 12 个节点是不够的。


==========


但这里要说明的是,因为这个代码使用了递归的方式,自顶向下构造这棵树,所以在这里会产生根节点的左右子树分别覆盖三个节点的情况。


如果是自底向上构造,可以避免这个空间的耗费。 此时,使用 2n 的空间就够了。(类似于归并排序自底向上构造)。


自底向上构造平衡树的方式课程中没有介绍,如果感兴趣可以自己实现一下,是一个很好的练习:)


继续加油!:)

0
hiuyubobobo
回复
hiaobai00000
hp>赞!完全正确:)

h021-05-12
共2条回复

算法与数据结构

波波老师5年集大成之作,算法与数据结构系统学习,考试、面试、竞赛通用

2610 学习 · 1087 问题

查看课程