答案
设叶子节点数为n0, 度为1的节点数为n1, 度为2的节点数为n2, 总节点为n
- 当n为奇数时 n0= (n+1)/2
- 当n为偶数 n0= n/2
数据结构重修, 快要结课了, 在家苦X的复习ing......
首先得知道什么是完全二叉树
emmm先看看满二叉树(完全二叉树是由满二叉树而引出来的)
满二叉树
高度为h, 由2^(h)-1个节点构成的二叉树称为满二叉树

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

正题
对于一棵二叉树, 设叶子节点数为n0, 度为1的节点数为n1, 度为2的节点数为n2
度为2的节点有2个分支, 度为1结点有1个分支, 度为0的节点有0个分支
则n0 = n2 + 1(公式1)
证明:
(度为2的节点有2个分支, 度为1结点有1个分支, 度为0的节点有0个分支)
总分支数=2*n2 + n1
另外分支数 = n0 + n1 + n2 - 1 (每个结点上面对应一个分支,除了根节点上面没有分支)
因此 2*n2 + n1 = n0 + n1 + n2 - 1 得 n0 = n2 + 1
假设n为完全二叉树的结点总数, 则有 n=n0+n1+n2(公式2)
结合公式 1和2 有 n0=(n-n1+1)/2
又因为 n1 = 0 或者 n1 = 1 只有这两种情况(完全二叉树的性质呀--只有一个分支的节点要么有, 要么没有, 剩下的全是两个分支的节点和0分支的叶子节点)
- 当n为奇数时(即度为1的节点为0个) n0= (n+1)/2
- 当n为偶数(即度为1的节点为1个) n0= n/2
- n1,n2,都可以求了吧
所以一般我们的做题思路就是,
先看总节点个数, 是奇还是偶,
奇数,可知 n1 = 0; 再计算n0,
此时n0, n1都知道了, n2 = n-n1-n0;
偶数同上