32 從上到下列印二叉樹(層序遍歷)

2021-10-05 05:59:04 字數 1150 閱讀 5666

題目一:不分行從上到下列印二叉樹

題目二:分行從上到下列印二叉樹(每一層列印到一行)

題目三:之字形列印二叉樹(第一行從左到右,第二行從右到左,......)

二叉樹的層序遍歷本質上就是廣度優先搜尋(bfs),題目

二、三無非就是輸出格式上新增一些細節限制。

廣度優先搜尋的基本套路:無論遍歷一幅有向圖還是一棵樹,都要用到佇列

首先把起始節點(對樹而言是根節點)放入佇列。

接下來每次從佇列的頭部取出乙個節點,遍歷這個節點之後把它能到達的節點(對樹而言是子節點)都依次放入佇列。

重複這個遍歷過程,直到佇列中的節點全部被遍歷為止。

題目二要求每一層列印到一行,就是要想辦法直到每一層節點的個數,迴圈開始前求佇列長度(初始為1),即當前這一層節點的個數,控制列印這麼多個節點,併入隊子節點後,再重複迴圈上述。(也可劍指offer思路,設定兩個變數,tobeprinted表示在當前節點還沒列印的節點數(出隊減1);nextlevel表示下一層的節點數。(入隊加1)。當tobeprinted為0時換行。)

題目三先從左到右,後從右到左......其實在題二的基礎上,新增判斷該行是否需要反序(偶數行反序),借助庫函式reverse()也可,可能效率不高。這裡通過分析列印順序,借助兩個棧,如果列印的是奇數行,下一層節點先左節點後右節點儲存到第乙個棧中,如果列印的是偶數行,下一層節點先右節點後左節點儲存到第二個棧中。迴圈直到兩個棧為空。

/********分行列印二叉樹*********************/

vector> print(treenode* proot)

res.push_back(vec);

}return res;

}/************之字形列印二叉樹*****************/

vector> print(treenode* proot)

res.push_back(vec1);

}if(!s1.empty())

res.push_back(vec2);}}

return res;

}

從上到下列印二叉樹 層序遍歷二叉樹

題目 從上往下列印出二叉樹的每個結點,同一層的結點按照從左到右的順序列印。例如輸入 8 6 10 5 7 9 11 輸出8 6 10 5 7 9 11。二叉樹結點的定義如下 struct binarytreenode 從上到下列印二叉樹的規律 每一次列印乙個結點的時候,如果該結點有子結點,則把該結點...

32 從上到下列印二叉樹

從上到下列印出二叉樹的每個節點,同一層的節點按照從左到右的順序列印。例如 給定二叉樹 3,9,20,null,null,15,7 返回 3,9,20,15,7 佇列 definition for a binary tree node.class treenode def init self,x se...

從上到下列印二叉樹

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