设计一个算法,求非空二叉树中指定的第k层(k>1)的叶子节点的个数

思想:采用基于层序遍历的方法。用level扫描各层节点,若某一层的节点出队后,rear指向该层中最右节点,则将rear赋值给last(对于第一层,last=1).在出队时,若front=last,表示这一层处理完毕,让层号level增1,并置last为下一层最右节点。那么如何求一层的最右节点呢?这是因为第一层只有一个节点,它就是最右节点。对于其他层,上一层最右节点最后进队的孩子一定是该层的最右节点。

例如,对于如图所示的二叉树,求k=3的叶子节点个数的过程如下:level=1;A进队时rear=1,last=rear=1,出队front=1,再将B和C进队,此时rear=3,由于last=front成立,表示处理下一层,让last=rear=3,level=level+1=2; 出队front=2即B节点,将D和E进队,出队front=3即C节点,将F进队,此时rear=6,由于front=rear成立,表示处理下一层,让last=rear=6,level=level+1=3;出队D(front=4),level=k且D为叶子节点,则leaf=leaf+1=1,出队E(front=5),level=k且E为叶子节点,则leaf=leaf+1=2,出队F(front=6),level=k且F为叶子节点,则leaf=leaf+1=3,由于front=last成立,表示处理下一层,让last=rear=6(没有新节点进队),level=level+1=4;level>k,返回leaf=3.





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值