算法:從上到下打印二叉樹

從上到下打印出二叉樹的每個(gè)節(jié)點(diǎn),同一層的節(jié)點(diǎn)按照從左到右的順序打印。
示例
給定二叉樹: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回:
[3,9,20,15,7]
提示
節(jié)點(diǎn)總數(shù) <= 1000
方法:迭代BFS
迭代第一層: 根節(jié)點(diǎn) 出隊(duì)列,存入到結(jié)果集合中,發(fā)現(xiàn)左/右子節(jié)點(diǎn)存在,存入到隊(duì)列中;

迭代第二層:左子節(jié)點(diǎn) 出隊(duì)列,存入到結(jié)果集合中,發(fā)現(xiàn)左/右子節(jié)點(diǎn)不存在,跳出本次循環(huán);右子節(jié)點(diǎn) 出隊(duì)列,存入到結(jié)果集合中,發(fā)現(xiàn)左/右子節(jié)點(diǎn)存在,存入到隊(duì)列中。

終止條件:循環(huán)上述步驟,直至迭代完所有節(jié)點(diǎn),跳出循環(huán);遍歷結(jié)果集合,轉(zhuǎn)化為數(shù)組返回,即可。
代碼如下:

復(fù)雜度分析
時(shí)間復(fù)雜度: O(N),N 為二叉樹的節(jié)點(diǎn)數(shù)量,即 BFS 需循環(huán) N 次。
空間復(fù)雜度: O(N),最差情況下,即當(dāng)樹為平衡二叉樹時(shí),最多有 N/2 個(gè)樹節(jié)點(diǎn)同時(shí)在 queue 中,使用 O(N) 大小的額外空間。
END
本文內(nèi)容出處是力扣官網(wǎng),希望和大家一起刷算法,在后面的路上不變禿但是變強(qiáng)!
好兄弟可以點(diǎn)贊并關(guān)注我的公眾號“javaAnswer”,全部都是干貨。
