建立乙個雜湊表,儲存每個節點和節點所在的層數。將頭結點和他的層數1先記入雜湊表中。接下來就是按照寬度優先遍歷的順序,按層逐個遍歷。而且再將左右孩子推入佇列的過程中,將節點所在層的資訊記錄到雜湊表中。遍歷的過程中記錄節點的當前所在層,如果該節點與之前遍歷的在同一層,則該層節點數增加,如果與之前遍歷的不在同一層,說明進入下一層,需要將記錄的節點數與之前的最大寬度取最大值,然後當前層數加一,當前層節點數置為1
完整**
#
include
#include
#include
#include
using
namespace std;
//結構體定義
class
tree};
intgetmaxwidth
(tree* head)
queue> q;
unordered_map,int
> levelmap;
levelmap.
insert()
; q.
push
(head)
;int curlevel =1;
int curnode =0;
int m = int_min;
while
(!q.
empty()
)else
if(head->left !=
nullptr))
; q.
push
(head->left);}
if(head->right !=
nullptr))
; q.
push
(head->right);}
}return
max(m,curnode);}
intmain()
求二叉樹寬度
題目 乙個二叉樹採用二叉鍊錶儲存,設計乙個函式計算這個二叉樹的寬度 解題思路 採用層次遍歷,將每乙個結點的資訊儲存在陣列中,結點的資訊包括這個結點的層數,以及結點的左右子樹,資料型別 為char型字元 然後對這個陣列進行遍歷,層號數目最多的即為該二叉樹最大寬度處的層號,然後計算這個層號的數目,即為最...
二叉樹最大寬度
題目描述 給定乙個二叉樹,編寫乙個函式來獲取這個樹的最大寬度。樹的寬度是所有層中的最大寬度。這個二叉樹與滿二叉樹 full binary tree 結構相同,但一些節點為空。每一層的寬度被定義為兩個端點 該層最左和最右的非空節點,兩端點間的null節點也計入長度 之間的長度。方法一 definiti...
二叉樹最大寬度
二叉樹的寬度 即具有結點數最多的那一層的結點數 思路 在二叉樹的層次遍歷演算法的基礎上修改 include include include using namespace std typedef char elemtype typedef struct bitnode bitree 建立二叉樹 vo...