1. 程式人生 > >求二叉樹第K層的葉子節點的個數(假設根節點是第一層)

求二叉樹第K層的葉子節點的個數(假設根節點是第一層)

演算法思想:採用佇列結構按層次遍歷,遍歷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

}