91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言中計算二叉樹的寬度的兩種方式

發布時間:2020-08-29 14:23:43 來源:腳本之家 閱讀:276 作者:lqh 欄目:編程語言

C語言中計算二叉樹的寬度的兩種方式

二叉樹作為一種很特殊的數據結構,功能上有很大的作用!今天就來看看怎么計算一個二叉樹的最大的寬度吧。

采用遞歸方式

下面是代碼內容:

int GetMaxWidth(BinaryTree pointer){
  int width[10];//加入這棵樹的最大高度不超過10
  int maxWidth=0;
  int floor=1;
  if(pointer){
    if(floor==1){//如果訪問的是根節點的話,第一層節點++;
      width[floor]++;
      floor++;
      if(pointer->leftChild)
        width[floor]++;
      if(pointer->rightChild)
        width[floor]++;
    }else{
      floor++;
      if(pointer->leftChild)
        width[floor]++;
      if(pointer->rightChild)
        width[floor]++;
    }
    if(maxWidth<width[floor])
      maxWidth=width[floor];
    GetMaxWidth(pointer->leftChild);
    floor--;//記得退回一層,否則會出錯。因為已經Get過了,所以要及時的返回。
    GetMaxWidth(pointer->rightChild);
  }
  return maxWidth;
}

采用非遞歸方式

采用非遞歸方式計算二叉樹的寬度需要借助于隊列。代碼如下:

int GetMaxWidth(BinaryTree pointer){
  if(pointer==null){
    return 0;
  }
  Queue<BinaryTreeNode> queue=new ArrayDeque<BinaryTreeNode>();
  int maxWidth=1;//最大寬度
  queue.add(pointer);
  while(true){
    int size=queue.size();//計算當前層的節點的個數
    if(size==0){
      break;
    }
    while(size>0){//如果當前層還有節點就進行下去
      BinaryTreeNode node=queue.poll();
      size--;
      if(node->leftChild)
        queue.add(node->leftChild);//當前節點的左子樹入隊
      if(node->rightChild)
        queue.add(node->rightChild);//當前節點的右子樹入隊
      maxWidth=Math.max(size,queue.size());
    }
  }
  return maxWidth;//返回計算所得的最大的二叉樹的寬度。
}

總結:

不管采用哪種方式,實際上還是利用了對二叉樹的遍歷的特點來進行的。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南漳县| 砀山县| 平谷区| 页游| 左贡县| 邻水| 广西| 承德县| 五指山市| 历史| 赤壁市| 灵寿县| 防城港市| 三江| 中牟县| 工布江达县| 南皮县| 临澧县| 察隅县| 沧源| 余姚市| 南靖县| 济宁市| 秦安县| 新竹县| 固原市| 镇康县| 武功县| 平果县| 揭西县| 大余县| 钟山县| 霍林郭勒市| 博兴县| 中阳县| 正宁县| 安乡县| 精河县| 固阳县| 枣阳市| 永登县|