劍指offer 層序列印二叉樹

2021-09-24 09:33:32 字數 1397 閱讀 4223

01 題目

給乙個二叉樹,從上到下按照層序列印二叉樹。

層序遍歷結果位 1,2,3,4,5,6,7,8

02 解題&**展示

用輔助佇列完成。

根節點首先到佇列裡面排隊,等待輸出。

根節點被輸出,將根節點的子孩子入隊排隊等待輸出。

紅色為已經入隊的元素

文字描述過程

1.將跟節點1,放入佇列中。

佇列:1。

輸出元素:

2.刪除隊首元素1,並輸出,將1的兩個子節點2,3入隊。

佇列:2,3。

輸出元素:1

3.刪除隊首元素2,並輸出,將2的兩個子節點4,5,入隊。

佇列:3,4,5

輸出元素:1,2

4.刪除隊首元素3,並輸出,將3的兩個孩子節點6,7,入隊。

佇列:4,5,6,7

輸出元素:1,2,3

5.刪除隊首元素4,並輸出,4無孩子節點,不入佇列。

佇列:5,6,7

輸出元素:1,2,3,4

6.刪除隊首元素5,並輸出,5無孩子節點,不入佇列。

佇列:6,7

輸出元素:1,2,3,4,5

7.刪除隊首元素6,並輸出,6的孩子節點8入列。

佇列:7,8

輸出元素:1,2,3,4,5,6

8.刪除隊首元素7,並輸出,7無孩子節點,不入佇列。

佇列:8

輸出元素:1,2,3,4,5,6,7

9.刪除隊首元素8,並輸出,8無孩子節點,不入佇列。

佇列:輸出元素:1,2,3,4,5,6,7,8

隊列為空,跳出迴圈。

03 總結&**

1.首先將根節點入佇列。

2.迴圈遍歷刪除佇列元素,並且輸出。(1)如果刪除元素有孩子節點則入隊。否則繼續刪除隊首元素操作。

3.隊列為空結束迴圈。

public class 面試題23層序列印二叉樹 

queuequeue = new linkedblockingqueue<>();

queue.add(binarytree);

while (!queue.isempty())

if (tmptreenode.rightchild != null)

}} public static void main(string args)

}

二叉樹的層序列印

void levelprint bintree bt else printf c dis,列印結點後,再列印其右邊距 next level nodes 2 左右子樹入隊,下一層結點數增加2 current level nodes 因為有出隊,所以當前層結點數減1 if current level n...

劍指Offer (樹)按之字形順序列印二叉樹

題目鏈結 題目描述 請實現乙個函式按照之字形列印二叉樹,即第一行按照從左到右的順序列印,第二層按照從右至左的順序列印,第三行按照從左到右的順序列印,其他行以此類推。解決方法 struct treenode class solution if flag reverse resl.begin resl....

劍指offer 按之字形順序列印二叉樹(樹)

請實現乙個函式按照之字形列印二叉樹,即第一行按照從左到右的順序列印,第二層按照從右至左的順序列印,第三行按照從左到右的順序列印,其他行以此類推。struct treenode class solution int flag 0 0 表示從左到右 father.push back proot whil...