思路:做这题前先看看从上往下打印二叉树
import java.util.*; public class Solution { public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { ArrayList<Integer> list = new ArrayList<Integer>(); if(root==null)return list; Queue<TreeNode> queue = new LinkedList<TreeNode>(); queue.offer(root); while(!queue.isEmpty()){ TreeNode temp = queue.poll(); list.add(temp.val);//给list复制还是要用.val if(temp.left!=null)queue.offer(temp.left); if(temp.right!=null)queue.offer(temp.right); } return list; } }
然后发现这题就是在从上往下打印基础上多了个层次问题。在while中加个int size = queue.size();就vans了
import java.util.*; public class Solution { ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) { ArrayList<ArrayList<Integer>> thelist = new ArrayList<ArrayList<Integer>>(); if(pRoot==null)return thelist; //这里要求返回thelist而不是null Queue<TreeNode> queue = new LinkedList<TreeNode>(); queue.offer(pRoot); while(!queue.isEmpty()){ ArrayList<Integer> list = new ArrayList<Integer>(); int size = queue.size(); for(int i=0;i<size;i++){ TreeNode temp = queue.poll(); list.add(temp.val); if(temp.left!=null)queue.offer(temp.left); if(temp.right!=null)queue.offer(temp.right); } thelist.add(list); } return thelist; } }