算法思想:采用队列结构按层次遍历,遍历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 }
原文地址:http://blog.csdn.net/shiliang3/article/details/41443881