引言
按照以上順序逐個深入分析,語言:c++。
22、從上往下列印二叉樹
題目描述:從上往下列印出二叉樹的每個節點,同層節點從左至右列印。
思路:利用佇列「先入先出」性質,列印某個結點的時候,若該結點有子結點,則把該結點的子結點放到乙個佇列的末尾,到佇列的頭部取出最早進入佇列的結點,重複前面的操作,直至佇列中所有的結點都列印完成。
vector<
int>
printfromtoptobottom
(treenode* root)
return res;
}
60、把二叉樹列印成多行
題目描述:從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。
思路:60是22題的變形,要求列印成多行。首先,對應 vector列印所有層節點的值,還需要一臨時變數 vector來存放每層的節點值。其次,還需考慮每層列印多少個節點值呢?所以還需要乙個變數num來記錄每一層的節點個數。
vectorint>
>
print
(treenode* root)
res.
push_back
(tmp)
;//將每一層列印值push_back進res
}return res;
}
59、按之字順序列印二叉樹
題目描述:按照之字形列印二叉樹,即第一行按照從左到右的順序列印,第二行按照從右至左的順序列印,第三行按照從左到右的順序列印,其他行以此類推。
思路:59又是在60題基礎上的變形,和上面一樣的思路,只需要解決乙個問題:如何實現偶數行從右至左的順序列印?只有偶數行才需要逆序列印,設定一bool變數order控制是否需要逆序列印,用內建reverse函式實現逆序。
vectorint>
>
print
(treenode* root)
if(order)
//偶數行逆序列印
reverse
(tmp.
begin()
,tmp.
end())
; res.
push_back
(tmp)
; order=
!order;
}return res;
}
本題採用佇列和內建reverse函式,該思路的複雜度較高,這裡只是為了承接上面兩題的方法歸納,大家可以去嘗試各種方法,如棧的實現等。 劍指offer 從上往下列印二叉樹
定義乙個佇列,依次加入佇列頭的子節點,並將佇列頭出佇列,知道隊列為空 coding utf 8 class treenode def init self,x self.val x self.left none self.right none class solution 返回從上到下每個節點值列表,...
劍指offer 之字形列印二叉樹
請實現乙個函式按照之字形列印二叉樹,即第一行按照從左到右的順序列印,第二層按照從右至左的順序列印,第三行按照從左到右的順序列印,其他行以此類推。利用兩個棧 定義乙個兩個棧的陣列 用current和next分別指示當前層和下一層,如果當前層是奇數層 current 0 則下一層先入棧左節點再入棧右節點...
劍指offer 從上往下列印二叉樹
題目描述 從上往下列印出二叉樹的每個節點,同層節點從左至右列印。其實就是二叉樹的層序遍歷 遍歷結果 a b c d e f g h 先存進去的節點先列印,這樣的特性不就和佇列fifo的特性相同了嗎?處理的方法就是將二叉樹的節點從上到下,從左到右的存入佇列中,然後逐個列印。struct treenod...