package leetcode;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.Stack;
public class offer_32_3 {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> list=new ArrayList<List<Integer>>();
//使用链表
LinkedList<TreeNode> queue=new LinkedList<TreeNode>();
if(root==null) {return list;}
int begin=0;
int oldend;
int end=0;
int level=0;
queue.addFirst(root);
while(!queue.isEmpty()) {
oldend=end;
List<Integer> l=new ArrayList<Integer>();
TreeNode temp;
//偶数行从链表头读取,并将子节点按左右存入
if(level%2==0) {
while(begin<=oldend) {
temp=queue.removeFirst();
l.add(temp.val);
if(temp.left!=null) {
queue.addLast(temp.left);
end=end+1;
}
if(temp.right!=null) {
queue.addLast(temp.right);
end=end+1;
}
begin=begin+1;
}
}else {
//奇数行从链表尾读取,并将子节点按右左存入
while(begin<=oldend) {
temp=queue.removeLast();
l.add(temp.val);
if(temp.right!=null) {
queue.addFirst(temp.right);
end=end+1;
}
if(temp.left!=null) {
queue.addFirst(temp.left);
end=end+1;
}
begin=begin+1;
}
}
list.add(l);
//记录行数
level=level+1;
}
return list;
}
}