求二叉树第K层的叶子节点的个数(假设根节点是第一层)

来源:互联网 发布:手机淘宝店铺店招 编辑:程序博客网 时间:2024/05/22 08:02

算法思想:采用队列结构按层次遍历,遍历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}







0 0
原创粉丝点击