完全二叉树的叶子数

今天做yahoo的在线笔试碰到这个题,当时没想起来
设n0, n1, n2为度为0, 1, 2的节点
对任意二叉树有 n0 = n2 + 1         .........(1)

对于完全二叉树而言,叶子节点只出现在最后2层. 即每个节点左右子数的高度最多相差1

可以很容易知道,完全二叉树中度为1的节点为0个或1个(即至多1个)
由n0+n1+n2=total, 且有(1)式得,
2*n0 = total +1-n1, n1 = 0或1
显然, 当total +1为偶数时, n1取0; 当total +1为奇数时, n1取1

最后, n0 = (total +1)/2, C中除法都是下取整

int  get_leaf_num( int  total)
{
    
int  n0;
    
int  tmp  =  total  +   1 ;
    
if (tmp % 2   ==   0 )
    {
         n0 
=  tmp / 2 ;
    }
    
else
    {
        n0 
=  (tmp  -   1 ) / 2 ;
    }
                
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值