題目地址:從上往下打印二叉樹_??皖}霸_??途W(wǎng)
題目回顧:
不分行從上往下打印出二叉樹的每個(gè)節(jié)點(diǎn),同層節(jié)點(diǎn)從左至右打印。例如輸入{8,6,10,#,#,2,1},如以下圖中的示例二叉樹,則依次打印8,6,10,2,1(空節(jié)點(diǎn)不打印,跳過(guò)),請(qǐng)你將打印的結(jié)果存放到一個(gè)數(shù)組里面,返回。
解題思路:
使用隊(duì)列
首先,隊(duì)列是尾部插入,頭部刪除的一種數(shù)據(jù)結(jié)構(gòu)。在遍歷樹的過(guò)程中使用層序遍歷的話,是從根開始由左向右進(jìn)行遍歷的,那么我們?cè)诒闅v樹的時(shí)候?qū)?dāng)前根的結(jié)點(diǎn)存入到隊(duì)列中去,遍歷到結(jié)點(diǎn)時(shí)將其從隊(duì)列中刪除,這樣一來(lái),隊(duì)列poll方法獲取的隊(duì)列的頭就是按從上到下順序的。也就是我們要的結(jié)果。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-643419.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-643419.html
整體代碼:
public static ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
ArrayList<Integer> res = new ArrayList<>();
if (root == null)
return res;
Queue<TreeNode> q = new LinkedList<>();
q.offer(root);
while (!q.isEmpty()){
TreeNode cur = q.poll();
res.add(cur.val);
if (cur.left!=null){
q.add(cur.left);
}
if (cur.right != null)
q.add(cur.right);
}
return res;
}
到了這里,關(guān)于JZ32 從上往下打印二叉樹(Java)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!