題目一:不分行從上到下列印二叉樹
題目二:分行從上到下列印二叉樹(每一層列印到一行)
題目三:之字形列印二叉樹(第一行從左到右,第二行從右到左,......)
二叉樹的層序遍歷本質上就是廣度優先搜尋(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...