剑指 Offer 32 - II. 从上到下打印二叉树 II
package leetcode; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Queue; public class offer_32_2 { public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> list=new ArrayList<List<Integer>>(); if(root==null) {return list;} Queue<TreeNode> queue=new LinkedList<TreeNode>(); int begin=0; int end=0; queue.add(root); while(!queue.isEmpty()) { //记录上一轮结束的位置 int oldend=end; List<Integer> l=new ArrayList<Integer>(); //从开始到上一轮结束的位置算作是一层节点 while(begin<=oldend) { //每次弹出头结点 TreeNode temp=queue.poll(); l.add(temp.val); if(temp.left!=null) { queue.add(temp.left); end=end+1; } if(temp.right!=null) { queue.add(temp.right); end=end+1; } begin=begin+1; } list.add(l); } return list; } }