剑指 offer-从上往下打印二叉树

题目:从上往下打印二叉树

题目描述:从上往下打印出二叉树的每个节点,同层节点从左至右打印

思路:考察二叉树的 层序遍历,通常借助使用一个队列或一个栈来完成

若是要求每层数据从左到右保存则用队列,若是要求每层数据从右到左保存则用栈(这种要求一般出现在“之”字型遍历 二叉树的题上)

题目本身好像要求只能用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 }

 

posted @ 2018-06-12 14:53  pathjh  阅读(235)  评论(0编辑  收藏  举报