從上到下列印二叉樹 (C 中等區)

2021-10-10 01:18:55 字數 1184 閱讀 1428

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

這題與上一題列印二叉樹又有點不同之處是在於:上一題是從上到下列印每一層,並將每一層儲存至陣列中;而本題是要求從上到下左右交替列印每一層,同時也將每一層儲存至陣列中。所以本題我們先定義乙個標誌位來判斷左右的列印順序,規定從左往右列印為真,從右往左列印為假,同時再借助雙端佇列來完成解答。

演算法大致流程:

判斷根節點是否為空,若為空直接返回空

定義乙個標誌位,規定從左往右列印為真,從右往左列印為假

若佇列不為空進入迴圈

得到這一層的節點個數n,當節點個數不為空時進入第二次迴圈

當flag為真,當前行從左往右列印,將下一行從左往右儲存在隊尾

當flag為假,當前行從右往左列印,將下一行從右往左儲存在隊首

當n=0時退出第二次迴圈,然後將標誌位取反

當隊列為空時推出第一層迴圈,返回容器res

**如下:

class

solution

;//建立乙個雙端陣列

deque> d;

d.push_back

(root)

;//定義乙個標誌位,從左往右列印為真,從右往左列印為假

bool flag=

true

;while

(!d.

empty()

)//當flag為假,當前行從右往左列印,將下一行從右往左儲存在隊首

else

//當前行節點個數減1

n--;//將當前節點插入到tem

tem.

push_back

(t->val);}

//進入下一行將標誌位取反

flag=

!flag;

//將儲存每行節點的tem插入到res中

res.

push_back

(tem);}

return res;}}

;執行用時:4 ms, 在所有 c++ 提交中擊敗了90.49

%的使用者

記憶體消耗:12.3 mb, 在所有 c++ 提交中擊敗了95.23

%的使用者

從上到下列印二叉樹

原理是二叉樹的層次遍歷 可以用乙個佇列輔助,先將二叉樹根節點入隊,然後出隊,將該節點存入vector中,之後判斷根節點的左子樹和右子樹是否為空,若不為空,依次入隊。然後出隊,再訪問出隊的結點是否有左右子樹,以此類推。核心 vectorprintfromtoptobottom treenode roo...

從上到下列印二叉樹

例如 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7 返回 3,9,20,15,7 2.1 思路分析 題目要求的二叉樹從上到下列印 即按層列印 又稱為二叉樹的廣度優先搜尋 bfs bfs通常借助佇列的先入先出特性來實現。2.2 演算法流程 特例處理 當樹的根結點為空,...

從上到下列印二叉樹

從上到下列印出二叉樹的每個節點,同一層的節點按照從左到右的順序列印。例如 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7返回 3,9,20,15,7 解題思路 演算法流程 特例處理 當樹的根節點為空,則直接返回空列表 初始化 列印結果列表 res 包含根節點的佇列 q...