劍指Offer32 從上到下列印二叉樹

2021-10-19 17:40:14 字數 2085 閱讀 1392

class

solution

; vector<

int> res;

queue> que;

que.

push

(root)

;while

(!que.

empty()

)return res;}}

;

1.常規寫法:o(n):遍歷n個結點,o(n):需要乙個佇列和乙個一維陣列,最壞情況下平衡二叉樹時,佇列所需空間為n/2,而一維陣列所需的空間是結點最多的那一層;

class

solution

; vectorint>

> res;

vector<

int> layer;

//重複利用,每存完一層就放入結果集res中,並清空用於下一層使用

queue> que;

que.

push

(root)

;while

(!que.

empty()

) res.

push_back

(layer)

; layer.

clear()

;}return res;}}

;

2.yxc的寫法:o(n):同上,o(n):同上

無需每層for迴圈,但為了區分每層,需要在每層結束後需要入隊乙個nullptr標記,其實還不如方法1易懂

class

solution

; vectorint>

> res;

vector<

int> layer;

queue> que;

que.

push

(root)

; que.

push

(nullptr)

;//每一層的結束入隊乙個nullptr

while

(!que.

empty()

)else

}return res;}}

;

class

solution

; vectorint>

> res;

vector<

int> layer;

queue> que;

que.

push

(root)

;while

(!que.

empty()

)if(res.

size()

%2)reverse

(layer.

begin()

, layer.

end())

;//將偶數層逆序

res.

push_back

(layer)

; layer.

clear()

;}return res;}}

;

2.yxc的寫法:個人感覺不如方法1

相當於再題目二的基礎上,再多設定乙個bool標記當前層是從左到右還是從右到左;

class

solution

; vectorint>

> res;

vector<

int> layer;

queue> que;

que.

push

(root)

; que.

push

(nullptr)

;//每一層的結束入隊乙個nullptr

bool l2r =

true

;//true代表從左到右,false代表從右到左

while

(!que.

empty()

)else

}return res;}}

;

劍指offer 32 從上到下列印二叉樹

宣告 本系列部落格是對何海濤 劍指offer 的關鍵點總結。從上到下列印出二叉樹的每乙個結點,同一層的結點按照從左到右的順序列印。如二叉樹 8 6 5,7 10 9,11 列印出8 6 10 5 7 9 11 1 使用佇列儲存要訪問的結點 2 從根結點開始,每次列印結點的時候,如果該結點有子結點,則...

劍指offer 32 從上到下列印二叉樹

2.分行從上到下列印二叉樹 3.之字形列印二叉樹 從上到下列印出二叉樹的每乙個節點,同一層的節點按照從左到右的順序列印 上圖中的二叉樹,則依次列印出 8,6,10,5,7,9,11 bfs 廣度優先搜尋 先擴充套件根節點 再依次擴充套件根節點的左右兒子,也就是從左到右擴充套件第二層節點 再依次從左到...

Python劍指offer 分行從上到下列印二叉樹

從上到下按層列印二叉樹,同一層的節點按照從左到右 的順序列印,每一層列印到第一行,例如本題中上乙個問題的二叉樹 輸出形式會是 86 10 5 7 9 11 這道題和前面一道題十分類似,也可以用乙個佇列來儲存要列印的節點。為了把二叉樹的每一行單獨列印到一行裡,我們需要兩個變數 乙個變數表示當前層中還沒...