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;
}
}