数据结构之完全二叉树

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cadi2011/article/details/86361280

0、手画了一个超级丑的完全二叉树(满二叉树是完全二叉树中的一种特殊情况)

1、图示中的层序编号 >= 0,也称为广度优先搜索(遍历),编号规则就是这样的。

2、一共是10个结点

3、最后一个非叶子结点是层序编号为4的结点,那么10 / 2 - 1 = 4

4、假设少一个结点呢,一共是9个结点昵? 最后一个非叶子结点的层序编号是多少昵?(此处只算整除结果哈)

9 / 2 - 1 = 4 - 1 = 3,我们看下层序编号3是不是最后一个非叶子结点,没错

5、规律,第一个非叶子结点的层序编号是, 总结点count / 2 - 1 = 第一个非叶子结点的层序编号

6、规律,那么倒数第二个非叶子结点的层序编号就是  count / 2 - 2 = 第二个非叶子结点的层序编号

7、定义

若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树

扫描二维码关注公众号,回复: 4909578 查看本文章

当前二叉树的深度是4,除第4层外,其他1-3层的结点树都已经达到最大的个数,第4层的所有结点都连续集中在最左边,所以它是完全二叉树

8、叶子结点集中在最后一层,或者倒数第二层

9、只有最后两层个别的结点度数可能是1

10、性质1:度为0的结点+度为1的结点+度为2的结点 = 结点总数,即 n0 + n1 + n2 = n,比如图示中n0 = 5 ,n1 = 1, n2 = 4,最后的结果是 5 + 1 + 4 = 10

11、一个度为0的结点拥有的孩子数是0个,一个度为1的结点拥有的孩子数是1个,一个度为2的结点拥有的孩子数是2个,那么完全二叉树中,根结点没有parent结点,其他结点(非叶子结点、叶子结点)均有parent结点。 

12、度为1的结点数量,不是1就是0,然后根结点一定有1个,根据11、12条目前交代的情况,最终公式优化出来的是1+n1+2*n2 = n,一个根结点+ 度为1的结点数量 + 非叶子结点数量 * 2 = 结点总数,根据图示中的情况,1 + 1 + 8 = 10

13、1+n1+2*n2 = n,n0+n1+n2 = n,所以1 + n1 + 2*n2 = n0 + n1 + n2,把n2从等式的两侧消除掉,最终得到2n0 -1 + n1 = n(最终得到)

14、消除n2的思路(错误版,其实也对)

1 + n1 + 2*n2 = n0 + n1 + n2

1 + n1 + n2 + n2 = n0 + n1 + n2

1+ n1 + n2 = n0 + n1

1 + n2 = n0 (得知),所以n2 = n0 -1

错误思路,最后n2就是还在,呵呵,尽管思路断了,还是很开心

15、消除n2的思路(正确版)

1 + n1 + 2*n2  = n

n0 + n1 + n2 = n

1 + n1 + 2*n2 = n0 + n1 + n2

1 + 2*n2 = n0 + n2

1+ n2 = n0 (得知)

n2 = n0 - 1 (得知)

2*n2 = 2n0 - 2(得知)

1 + n1 + 2n0 - 2  = n (替换进去)

n0 + n1 + n0 - 1 = n (替换进去)

2n0 -1 + n1 = n(最终得到)

16、根据最终得到的 2n0 -1 + n1 = n,换算出 n / 2 = n0,或者(n + 1) /2 = n0,因为 n1的值可能是0或者是1, 牛逼,n1如果是0,那证明总结点数n是奇数,如果n1是1,则证明总结点数n是偶数,都是因为根结点是1个造成的

猜你喜欢

转载自blog.csdn.net/cadi2011/article/details/86361280