1, 注意collections.reverse 指令
2, 注意current level 和next level的识别标记
3, bfs 在这里利用的queue的特性: fifo。
ref :http://www.cnblogs.com/springfor/p/3891393.html
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public ArrayList<ArrayList<Integer>> zigzagLevelOrder(TreeNode root) {
ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>> ();
if(root==null) return res;
int clevel = 1, nlevel = 0;
boolean rev = false;
LinkedList<TreeNode> q = new LinkedList<TreeNode>();
q.add(root);
ArrayList<Integer> itm = new ArrayList<Integer>();
while(!q.isEmpty()){
TreeNode t = q.poll(); // 注意这里不是pop!
itm.add(t.val);
clevel--;
if(t.left!=null){
nlevel++;
q.add(t.left);
}
if(t.right!=null){
nlevel++;
q.add(t.right);
}
if(clevel==0){
clevel=nlevel;
nlevel=0;
if(rev){
Collections.reverse(itm); // 这个用法学习了
rev= false;
}else{
rev = true;
}
res.add(itm);
itm = new ArrayList<Integer>();
}
}
return res;
}
}