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

2021-08-19 20:53:59 字數 1376 閱讀 2174

宣告:本系列部落格是對何海濤《劍指offer》的關鍵點總結。

從上到下列印出二叉樹的每乙個結點,同一層的結點按照從左到右的順序列印。

如二叉樹(8(6(5,7),10(9,11)))列印出8 6 10 5 7 9 11

1)使用佇列儲存要訪問的結點;

2)從根結點開始,每次列印結點的時候,如果該結點有子結點,則把該結點的子結點放入佇列的末尾。

3)從佇列的頭部取出最早放進去的結點,重複2)直到佇列中所有的結點被列印出來。

/*

struct treenode

};*/

class solution

return res; }};

從上到下列印出二叉樹的每乙個結點,同一層的結點按照從左到右的順序列印,每一層列印到一行。

如二叉樹(8(6(5,7),10(9,11)))列印出:

8 6 10 

5 7 9 11

在問題1的基礎上,新增兩個變數:

int tobeprinted:表示當前層中還有多少個需要列印;

與問題1的差異用//*****標記

struct binarytreenode ;

void printfromtoptobottom(binarytreenode * ptreeroot)

if (pnode->pright)

//*****控制轉行輸出

根絕問題描述可知,奇數層從左到右列印,偶數層從右到左列印,即先訪問的結點,其子結點反而是後列印的,所以是乙個明顯的後進先出結構,需要借助兩個棧來完成。

1)如果列印的是奇數層(從左到右),使用1表示奇數,則在第乙個棧中,先儲存其左子結點,後儲存右子結點;

2)如果列印的是偶數層(從右到左),使用0表示偶數,則在第二個棧中,先儲存其右子結點,後儲存左子結點;

struct binarytreenode ;

void printfromtoptobottom(binarytreenode * ptreeroot)

//偶數層先儲存右結點,後儲存左結點

else

//判斷是否轉行進入下一層

if (istack[current].empty())}}

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

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

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

class solution vector int res queue que que.push root while que.empty return res 1.常規寫法 o n 遍歷n個結點,o n 需要乙個佇列和乙個一維陣列,最壞情況下平衡二叉樹時,佇列所需空間為n 2,而一維陣列所需的空間...

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

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