思想:采用基于层序遍历的方法。用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.