算法思想:采用队列结构按层次遍历,遍历K层时记录叶子的个数
int LeafKlevel(BiTree bt, int k){
//求二叉树bt的第k(k >1)层上叶子的节点个数
if(bt == NULL || k < 1)
return 0;
BiTree p=bt,Q[]; //Q是队列,元素是二叉树节点的指针
int front = 0,rear = 1,leaf = 0 //front 和 rear 是队头和队尾指针,leaf是叶子节点数
int last = 1,level = 1; //last是二叉树同层最右节点的指针,level是二叉树的层数
Q[1] = p; //根节点进队列
while(front <= rear){
p = Q[++front];
if(level == k && !p->lchild && !p->child)
leaf++; //叶子节点
if(p->lchild)
Q[++rear] = p->lchild; //左孩子入队
if(p->rchild)
Q[++rear] = p->rchild; //右孩子入队
if(front == last){
level++; //二叉树同层最右节点已处理,层数增加一
last = rear; //last移动到下一层的最右一个元素
}
if(level > k)
return leaf;
}//while
}