1. 程式人生 > >劍指 offer-從上往下打印二叉樹

劍指 offer-從上往下打印二叉樹

poll roo off 一個棧 val printf pri 題目 模擬

題目:從上往下打印二叉樹

題目描述:從上往下打印出二叉樹的每個節點,同層節點從左至右打印

思路:考察二叉樹的 層序遍歷,通常借助使用一個隊列或一個棧來完成

若是要求每層數據從左到右保存則用隊列,若是要求每層數據從右到左保存則用棧(這種要求一般出現在“之”字型遍歷 二叉樹的題上)

題目本身好像要求只能用ArrayList,我這裏直接用隊列解了

 1 import java.util.ArrayList;
 2 import java.util.LinkedList;
 3 import java.util.Queue;
 4 /**
 5 public class TreeNode {
6 int val = 0; 7 TreeNode left = null; 8 TreeNode right = null; 9 10 public TreeNode(int val) { 11 this.val = val; 12 13 } 14 15 } 16 */ 17 public class Solution { 18 public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { 19 ArrayList<Integer>list=new
ArrayList<>(); 20 Queue<TreeNode>queue=new LinkedList<>(); 21 if(root==null)return list; 22 queue.offer(root); 23 while(!queue.isEmpty()){ 24 TreeNode tmp=queue.poll(); 25 if(tmp.left!=null)queue.offer(tmp.left); 26 if
(tmp.right!=null)queue.offer(tmp.right); 27 list.add(tmp.val); 28 } 29 return list; 30 } 31 }

當然,直接用一個ArrayList模仿隊列也可以的

 1 import java.util.ArrayList;
 2// 用arraylist模擬一個隊列來存儲相應的TreeNode
 3 
 4 public class Solution {
 5     public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
 6         ArrayList<Integer> list = new ArrayList<>();
 7         ArrayList<TreeNode> queue = new ArrayList<>();
 8         if (root == null) {
 9             return list;
10         }
11         queue.add(root);
12         while (queue.size() != 0) {
13             TreeNode temp = queue.remove(0);
14             if (temp.left != null){
15                 queue.add(temp.left);
16             }
17             if (temp.right != null) {
18                 queue.add(temp.right);
19             }
20             list.add(temp.val);
21         }
22         return list;
23     }
24 }

劍指 offer-從上往下打印二叉樹