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...