完全二叉树叶子节点的算法?

完全二叉树叶子节点的算法?,第1张

二叉树的叶子节点数为n0,度数为2的节点数为n2,设n1为二叉树中度为1的节点数

因为二叉树中所有节点的度都钓鱼或者等于2,所以二叉树节点总数n=n0+n1+n2

再看二叉树的分支数,除了根节点外,其余节点都有一个分支进入,设B为分支总数,则n=B+1

由于这些分支都是有度为1或者2 的节点射出的,所以B=n1+n2;于是有n=n1+2n2+1

综合n=n0+n1+n2和n=n1+2n2+1两式即可得到n0=n2+1

完全二叉树是特殊的二叉树,对于n0=n2+1当然成立

设二叉树中度为0叶子有n0个,度为1 结点有n1 个,度为2 结点有n2个
n0 + n1 + n2 = n (1)
按照二叉树性质:n0 = n2 + 1,也就是n2 = n0 -1
于是代入(1) 得:2n0 + n1 - 1 = n
按照完全二叉树性质,度为1 的结点最多1个
因此当n为偶数时,n1 = 1,因此n0 = n / 2
当n为奇数时,n1 = 0,因此n0 = (n + 1)/2
合并这两个结果有:n0 = (n + 1)/2 ,实际是整数除法,也就是下取整

计算完全二叉树的节点数,复杂度小于O(N)

由于要求复杂度为小于O(N),那么遍历所有节点的方式肯定是不可能的了。那么回顾完全二叉树概念

那么我们知道一个满二叉树的节点数,满足以下公式,h为二叉树的高度:

所以,对于完全二叉树,其总是满足以下两种情形:
1、node的右子树,到达底部,说明node的左子树是满二叉树,如图所示:

2、node的右子树,没有到达底部,说明node的右子树是底层高度 - 1 的满二叉树,如图所示:

那么,根据以上两个情况,我们可以递归的求每个节点的节点数

方法1:

根据二叉树性质3可以反推度为1的结点个数,设完全二叉树的总结点个数为n,度为0的结点个数为n0,度为1的结点个数为n1,度为2的结点个数为n2 则

n=n0+n1+n2

n1=n-n0-n2

方法2:

我们知道完全二叉树的特点,它缺少结点时总是出现在叶子层(即最下面一层)的右子树开始连续缺少。

我们设完全二叉树的深度为k(k>1),则从第1层至第k-1层的结点总数为2^k-1个(根据二叉树性质2计算出来)且一定是奇数,所以完全二叉树最下面一层的最左子树开始计算,如果出现偶数个结点则不存在度为1的结点,反之度为1的结点个数一定是1。

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

完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。

(1)所有的叶结点都出现在第k层或k-l层(层次最大的两层)

(2)对任一结点,如果其右子树的最大层次为L,则其左子树的最大层次为L或L+l。

一棵二叉树至多只有最下面的两层上的结点的度数可以小于2,并且最下层上的结点都集中在该层最左边的若干位置上,则此二叉树成为完全二叉树,并且最下层上的结点都集中在该层最左边的若干位置上,而在最后一层上,右边的若干结点缺失的二叉树,则此二叉树成为完全二叉树。

扩展资料:


如果一棵具有n个结点的深度为k的二叉树,它的每一个结点都与深度为k的满二叉树中编号为1~n的结点一一对应,这棵二叉树称为完全二叉树。

可以根据公式进行推导,假设n0是度为0的结点总数(即叶子结点数),n1是度为1的结点总数,n2是度为2的结点总数,则 :

①n= n0+n1+n2 (其中n为完全二叉树的结点总数);又因为一个度为2的结点会有2个子结点,一个度为1的结点会有1个子结点,除根结点外其他结点都有父结点,

②n= 1+n1+2n2 ;由①、②两式把n2消去得:n= 2n0+n1-1,由于完全二叉树中度为1的结点数只有两种可能0或1,由此得到n0=n/2 或 n0=(n+1)/2。

简便来算,就是 n0=n/2,其中n为奇数时(n1=0)向上取整;n为偶数时(n1=1)。可根据完全二叉树的结点总数计算出叶子结点数。

参考资料:

百度百科---完全二叉树

noip中经常会遇到求完全二叉树叶子结点的问题,比如第十一届全国青少年信息学奥林匹克联赛初赛试题的第四题:完全二叉树的结点个数为4 N+ 3 ,则它的叶结点个数为()。
A 2 N B 2 N- 1 C 2 N+ 1 D 2 N- 2 E 2 N+ 2
结论:如果一棵具有n个结点的深度为k的完全二叉树,其叶子结点数和总结点数有这样的关系:n(叶子)=(n总+1)/2,由上所知,我们可以判断这道题的 叶结点个数为(4 N+ 3+1)/2=2 N+ 2

14(第十二届).高度为n的均衡的二叉树是指:如果去掉叶结点及相应的树枝,它应该是高度为n-1的满二叉树。在这里,树高等于叶结点的最大深度,根结点的深度为0,如果某个均衡的二叉树共有2381个结点,则该树的树高为()。
A 10 B 11 C 12 D 13
均衡二叉树就是:任意两个度不为2的节点的深度之差不大于1
例如:
1
/ \
2 3
\ /
4 5
是均衡二叉树

1
/ \
2 3
\ / \
4 5 6
/
7
就不是,2和7的深度差2
因为2^11 = 2048;所以一颗满二叉树从深度为0(根节点)到深度10的总节点数是2047,剩下2381-2047 = 334个节点,这剩下的节点的深度都是11。
所以答案为B


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12947118.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-29
下一篇 2023-05-29

发表评论

登录后才能评论

评论列表(0条)

保存