二叉樹----寬度計算

鴨脖發表於2012-06-12
 #define M 10 //假設二叉樹最多的層數
 int Width(BinTree T)
  { 
   int static n[M];//向量存放各層結點數
   int static i=1;
   int static max=0;//最大寬度
   if(T)
    {
     if(i==1) //若是訪問根結點
      { 
       n[i]++; //第1層加1
       i++; //到第2層
       if(T->lchild)//若有左孩子則該層加1
        n[i]++;
       if(T->rchild)//若有右孩子則該層加1
        n[i]++;
      }
     else
      { //訪問子樹結點
       i++; //下一層結點數
       if(T->lchild)
        n[i]++;
       if(T->rchild) 
        n[i]++;
      }
     if(max<n[i])max=n[i];//取出最大值
      Width(T->lchild);//遍歷左子樹
     i--; //往上退一層
     Width(T->rchild);//遍歷右子樹
    }
   return max;
  }//演算法結束

相關文章