給定一棵二叉樹,要求按分層遍歷該二叉樹,即從上到下按層次訪問該二叉樹(每一層將單獨輸出一行),每一層要求訪問的順序為從左到右,並將節點依次編號。 要求遍歷輸出的結果分別為圖2,圖3和圖4,其中圖3和圖4是擴充套件問題。
圖1 圖2 圖3 圖4
程式設計之美書上,採用的是容器構成的陣列來實現的,相比於遞迴演算法,時間複雜度大大降低,僅為o(n),但其空間複雜度並非最優。此處採用stl中的queue來解決此問題,**如下:
節點資料:
struct node
;
實現**:
queuequeue3;//------------------使用系統的stl的queue
void cengxu3(node* root)
cout該法中採用佇列,將已輸出的節點彈出,節省了空間開銷,降低了空間複雜度。
對於輸出指定行的節點資料,只需引入乙個變數儲存層數即可,**如下:
queuequeue5;
void cengxu_n_ceng(node *root,int ceng)
if (temp->pleft)
queue5.push(temp->pleft);
if (temp->pright)
queue5.push(temp->pright);
} if (cengshu==ceng)
;queuequeue3;//------------------使用系統的stl的queue
stackqueue3_temp;
stack> queue3_tempfan;
void cengxu3(node* root)
if (temp->pright)
}queue3_tempfan.push(queue3);
queue3_temp.push('\n');
cout
} cout採用先序和中序結果重建二叉樹(**見3.9
),再對其進行遍歷的測試結果如圖5所示,前四行分別為先序、中序、後序和層序遍歷結果,後面3個三角形分別對應圖2、圖3、圖4中的結果。
圖5
程式設計之美 3 10 分層遍歷二叉樹
1 2 3 4 5 6 7 8 運用bfs只能輸出1,2,3,4,5,6,7,8這個序列,並不知道分層資訊,因此如何分層列印呢?我的方法就是對每乙個節點做以下判斷,如果該節點在佇列中的下乙個節點是是null說明該節點是樹在某一層的最後乙個節點,將該節點的子節點輸入佇列中之後,在輸入乙個null節點。...
程式設計之美 3 10 分層遍歷二叉樹
看到這本書就有一種高大上的感覺,隨手翻翻,今天又搞一道!首先,看到問題1我首先想到了圖的廣度優先搜尋遍歷演算法,後來一查書 資料結構高分筆記 才想起來樹本來就有一種遍歷方式叫 層次遍歷 p110 也就問題1中想要列印樹的方式。利用了資料結構 迴圈佇列 作為輔助的工具。其實自己想的時候也想到了用佇列的...
程式設計之美讀書筆記 3 10 分層遍歷二叉樹
3.10 分層遍歷二叉樹 看到milo寫的這篇文章 又翻了下書,發現書的 p253 有個瑕疵,每個節點值後面都會顯示乙個空格,如果將間隔字元改為 輸出的每行最後都有乙個 不能達到要求。不過,只要將 cout vec cur data 這行改為 if cur last 1 cout vec cur d...