对“一棵有124个叶节点的完全二叉树,最多有多少个结点”的思考

在网上看到这个问题,在讨论答案到底是248,还是247,评论普遍认为是247,但我觉得答案是248

先再读一遍题目,里面有“最多”两个字,也就是说能满足条件的完全二叉树不止一种,要找出结点最多的那个

评论里的人几乎都认为答案唯一且为247,评论里的观点是:非叶节点数目 = 叶节点-1

这个观点并不是完全正确的,它需要加上一个前提,就是完全二叉树的最右非终结结点的子树个数是二

下面我按照最右非终结结点的子树是二和一两种情况进行分析:

一、最右非终结结点的子树个数是二
在这里插入图片描述
除去第n层的全部结点数: 2 n − 1 − 1 2^{n-1} - 1 2n11

总结点数: 2 n − 1 − 1 + S 2^{n-1} - 1+S 2n11+S
由此,可以得到:非叶节点数 = 总结点数 − S − T -S-T ST = 2 n − 1 − T − 1 2^{n-1}-T-1 2n1T1——————1

第n-1层结点数: S / 2 + T S/2 +T S/2+T 2 n − 2 2^{n-2} 2n2
由此,得到等式: S / 2 + T = 2 n − 2 S/2 +T=2^{n-2} S/2+T=2n2
将等式变型得到:叶结点数= S + T = 2 n − 1 − T S+T=2^{n-1}-T S+T=2n1T——————————————2

将1,2两式联立(将最后得到的数值进行比较),得:非叶节点数目 = 叶节点-1

二、最右非终结结点的子树个数是一
在这里插入图片描述
除去第n层的全部结点数: 2 n − 1 − 1 2^{n-1} - 1 2n11

总结点数: 2 n − 1 − 1 + S 2^{n-1} - 1+S 2n11+S
由此,可以得到:非叶节点数 = 总结点数 − S − T -S-T ST = 2 n − 1 − T − 1 2^{n-1}-T-1 2n1T1——————1

第n-1层结点数: ( S + 1 ) / 2 + T (S+1)/2 +T S+1/2+T 2 n − 2 2^{n-2} 2n2
由此,得到等式: ( S + 1 ) / 2 + T = 2 n − 2 (S+1)/2 +T=2^{n-2} S+1/2+T=2n2
将等式变型得到:叶结点数= S + T S+T S+T= 2 n − 1 − T − 1 2^{n-1}-T-1 2n1T1————————————2

将1,2两式联立(将最后得到的数值进行比较),得:非叶节点数目 = 叶节点

最终结论:
当完全二叉树的最右非终结结点子树个数为一时,非叶节点数目 = 叶节点;
当完全二叉树的最右非终结结点子树个数为二时,非叶节点数目 = 叶节点-1

所以,再回到题目本身,我们也要分两种情况讨论:
1.最右非终结结点子树个数为二时,非叶结点数 = 124 − 1 = 123 =124-1=123 =1241=123
二叉树结点总数 = 124 + 123 = 247 =124+123=247 =124+123=247
S = 120 , T = 4 S=120,T=4 S=120,T=4 (相加后就是题目要求的叶节点的总数,S和T不清楚的再看一下上面的图)
第n-1层结点数量为: 64 64 64(即 S / 2 + T S/2+T S/2+T
64 64 64 2 6 2^{6} 26,符合完全二叉树的特点

2.最右非终结结点子树个数为一时,非叶结点数 = 124 =124 =124
二叉树结点总数 = 124 + 124 = 248 =124+124=248 =124+124=248
S = 121 , T = 3 S=121,T=3 S=121,T=3 (相加后就是题目要求的叶节点的总数)
第n-1层结点数量为: 64 64 64(即 ( S + 1 ) / 2 + T (S+1)/2+T (S+1)/2+T
64 64 64 2 6 2^{6} 26,符合完全二叉树的特点

又因为题目要求最大总结点数,取第二种情况,答案: 248 248 248


不好意思,之前由于本人的疏忽,本题的结论有一些错误,推导过程没有问题,现已修改过来,对于给大家理解时带来的误导和不便十分抱歉。
感谢zonezn指出本文结论中的错误!

  • 38
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值