劍指 32 3 之字形列印二叉樹

2021-10-13 10:01:51 字數 1294 閱讀 2228

【c++刷題學習筆記目錄】

【c++百萬併發網路通訊-筆記目錄】

請實現乙個函式按照之字形順序列印二叉樹,即第一行按照從左到右的順序列印,第二層按照從右到左的順序列印,第三行再按照從左到右的順序列印,其他行以此類推。

例如:給定二叉樹:[3,9,20,null,null,15,7],

3

/ \ 9

20/ \

157

返回其層次遍歷結果:

[[3

],[20

,9],

[15,7

]]

二叉樹、棧

既然是反轉順序,自然想到了棧的**先出特性,只是沒想到需要用兩個棧。

劍指上就給出了兩個棧的配合反轉,比如示例中將3存入棧0的時候,要將下一層節點920存入棧中,根據棧**先出的規矩,我們要先輸出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

題目要求 請實現乙個函式按照之字形列印二叉樹,即第一行按照從左到右的順序列印,第二層按照從右至左的順序列印,第三行按照從左到右的順序列印,其他行以此類推。解題思路 之字形列印 先遍歷後進來的節點的子樹 類似於棧的思想 設定乙個棧用來裝上一層的節點 源節點,根據這乙個棧的節點遍歷它的左右子樹,遍歷完這...