【c++刷題學習筆記目錄】【c++百萬併發網路通訊-筆記目錄】
請實現乙個函式按照之字形順序列印二叉樹,即第一行按照從左到右的順序列印,第二層按照從右到左的順序列印,第三行再按照從左到右的順序列印,其他行以此類推。
例如:給定二叉樹:[3,9,20,null,null,15,7]
,
3
/ \ 9
20/ \
157
返回其層次遍歷結果:
[[3
],[20
,9],
[15,7
]]
二叉樹、棧
既然是反轉順序,自然想到了棧的**先出特性,只是沒想到需要用兩個棧。
劍指上就給出了兩個棧的配合反轉,比如示例中將3
存入棧0
的時候,要將下一層節點9
和20
存入棧中,根據棧**先出的規矩,我們要先輸出20
,那麼就要最後儲存20
,那麼也就是在第2層上我們要先儲存左子節點,再儲存右子節點。假設現在到了儲存第3層子節點了,因為題目要最後輸出7
,那麼我們就要首先儲存7
,就是先儲存右子節點,再儲存左子節點。因此,不同層的輸出順序就變成了入棧的左右子節點順序問題。
struct treenode };
class
solution
; vectorint>> res;
vector<
int> tmpres;
stack> level[2]
;int cur =0;
//當前處理棧在陣列中的下標,==0:當前偶數層;==1:當前為奇數層
int next =1;
level[cur]
.push
(root)
;while
(!level[cur]
.empty()
||!level[next]
.empty()
)else
if(level[cur]
.empty()
);cur =
1- cur;
next =
1- next;}}
return res;}}
;
劍指offer 之字形列印二叉樹
請實現乙個函式按照之字形列印二叉樹,即第一行按照從左到右的順序列印,第二層按照從右至左的順序列印,第三行按照從左到右的順序列印,其他行以此類推。利用兩個棧 定義乙個兩個棧的陣列 用current和next分別指示當前層和下一層,如果當前層是奇數層 current 0 則下一層先入棧左節點再入棧右節點...
劍指offer 之字形列印二叉樹
請實現乙個函式按照之字形順序從上向下列印二叉樹。即第一行按照從左到右的順序列印,第二層按照從右到左的順序列印,第三行再按照從左到右的順序列印,其他行以此類推。輸入如下圖所示二叉樹 8,12,2,null,null,6,4,null,null,null,null 8 12 2 6 4 輸出 8 2,1...
劍指Offer 之字形列印二叉樹 Python
題目要求 請實現乙個函式按照之字形列印二叉樹,即第一行按照從左到右的順序列印,第二層按照從右至左的順序列印,第三行按照從左到右的順序列印,其他行以此類推。解題思路 之字形列印 先遍歷後進來的節點的子樹 類似於棧的思想 設定乙個棧用來裝上一層的節點 源節點,根據這乙個棧的節點遍歷它的左右子樹,遍歷完這...