計算二叉樹的最大寬度(非遞迴)

2021-08-10 05:46:07 字數 690 閱讀 1579

在做pta作業的時候接觸到了這個題,花了乙個小時完全弄明白他的原理,我真是笨啊!!!

思考這個問題,怎樣才能層序遍歷二叉樹?

那就是用佇列,每當有乙個節點出佇列,則將這個出佇列的節點的左右孩子入佇列,這樣可以按照層序遍歷整個二叉樹。

那怎樣在層序遍歷的基礎上將每層二叉樹的節點分割開來,即達到累計出每層二叉樹節點數目的作用呢?

那就要借助「數量標註」了,所謂數量標註就是設定乙個變數來標定你這一層的節點的數量,利用隊列入隊和出隊時佇列的隊頭與隊尾位置關係的變化關係來達成分隔二叉樹層次的作用。

所以求二叉樹寬度的演算法的思路就是:

先建立乙個佇列,用乙個標註變數去標註最開始時隊尾的位置,然後用乙個迴圈來操作二叉樹,迴圈體內的操作和層序遍歷類似,不同的是,在每趟迴圈結束後都要來判斷上一層是否便利完成(用那個標註變數和隊首的位置比較)如果便利完成,則重新整理最大寬度和bia

typedef struct treenode *bintree;

struct treenode

;int width( bintree t )

/* end-if */

} /* end-while */

return max_width;

} /* end-else */

}

二叉樹寬度 非遞迴 天勤

這裡認為書上求max那段for迴圈對j的賦值是錯誤的。訂正一下 求二叉樹的寬度函式 typedef struct st int maxnode btnode b if q rchild null for i 1 i lno i if n max max n return max else retur...

二叉樹最大寬度

題目描述 給定乙個二叉樹,編寫乙個函式來獲取這個樹的最大寬度。樹的寬度是所有層中的最大寬度。這個二叉樹與滿二叉樹 full binary tree 結構相同,但一些節點為空。每一層的寬度被定義為兩個端點 該層最左和最右的非空節點,兩端點間的null節點也計入長度 之間的長度。方法一 definiti...

二叉樹最大寬度

二叉樹的寬度 即具有結點數最多的那一層的結點數 思路 在二叉樹的層次遍歷演算法的基礎上修改 include include include using namespace std typedef char elemtype typedef struct bitnode bitree 建立二叉樹 vo...