分析第一步,二叉树根据完整性(即最后一层是否满了)可分为“完整二叉树”和“非完整二叉树”(不知道有没有这个概念,自己定义的),然后从特殊情况开始即“完整二叉树”开始分析。
设二叉树共N层,每层都是满的。那么第一层有1个结点,第二层有1*2个结点,第三层有1*2*2个结点,第N层有2^(N-1)个结点。
一共有1+2+2*2+2^3+2^4+·····+2^(N-1)个结点根据等比数列的求和可以得到结果为(2^N)-1个结点。
由此发现一个神奇的现象,1.完全二叉树个数是奇数个,因为除了顶端哪一个,地下每层都是成对出现的。
总结点数:S = (2^N)-1,最后一层结点数(叶子结点数):2^(N-1)
所以非叶子结点数为2^N-1-2^(N-1) = 2^(n-1)-1 正好比最后一层结点(叶子结点)少一个
那么非完整二叉树又如何呢?
非完整二叉树最后一层最少要缺少1个,最多缺少几个呢,我们知道完整二叉树最后一层一共有2^(N-1)个结点,假设非完整二叉树最后一层少了2^(N-1)个结点,那么他就是完整二叉树,层数是N-1,所以最后一层不能少2^(N-1)个,所以最多缺少2^(N-1)-1个也就是最后一层只剩下一个结点了。
假设非完整二叉树少了M个结点,那么M>=1并且M<=2^(N-1)-1
那么他的叶子结点和非叶子结点各是多少呢?这里有个误区,你可能认为叶子节点就是最后一层的结点个数,错!,第二层右边的部分结点也可能是叶子结点,只要他地下没有结点链接了就是叶子结点!比如下图红色部分都是叶子结点
那么第二层究竟有多少叶子结点呢?
我们知道一个结点下面最多有两个结点,那么,非完整树下面缺少M个节点造就了多少个叶子节点呢?
M=1,造就了0个,如下图
M=2,造就了1个叶子节点,如下图
依次类推,假设M是偶数,那么创造了M/2个叶子节点,如果M是奇数,那么创造了(M-1)/2个叶子节点。
相对应的非叶子节点就少了M/2个或者少了(M-1)/2个。
假设新转换的叶子节点个数是T,那么
叶子节点数为原本有的2^(N-1)个少了M个,多了T个,就是2^(N-1)-M+T个,且T = M/2或者T = (M-1)/2
整颗树的结点有完全数的(2^N)-1个减去少了的M个,就是(2^N)-1-M个
非叶子结点个数就是两者差即:(2^N)-1-M-[2^(N-1)-M+T]=2^(N-1)-1-T
数学不好的看这里:(2^N)-1-M-[2^(N-1)-M+T] 展开括号得到 (2^N)-1-M-2^(N-1)+M-T
然后M消掉得到(2^N)-1-2^(N-1)-T 然后2^N可以转化为2*2^(N-1) 得到 2*2^(N-1)-2^(N-1)-1-T
最后得到2^(N-1)-1-T
叶子结点与非叶子结点的差=2^(N-1)-M+T - [(2^N-1)-1-T] = 2*T-M+1
当M为偶数的时候,T=M/2 上述差值为1
当M为奇数时,T = (M-1)/2 上述差值为 0
所以叶子结点和非叶子结点对半分,叶子结点最多多一个