简单使用BFS进行遍历,但是每隔一次要逆序一下数组
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> ans = new ArrayList<>();
if(root != null){
LinkedList<TreeNode> pre = new LinkedList<>();
LinkedList<TreeNode> cur = new LinkedList<>();
pre.add(root);
List<Integer> list = new ArrayList<>();
list.add(root.val);
boolean flag = false;
do{
ans.add(list);
while(!pre.isEmpty()){
TreeNode top = pre.pop();
if(top.left != null) cur.add(top.left);
if(top.right != null) cur.add(top.right);
}
list = new ArrayList<>();
for(TreeNode t : cur){
list.add(t.val);
}
if(!flag)
for(int i = 0, len = list.size() / 2; i < len; ++i){
int idx = list.size() - i - 1;
int t = list.get(i);
list.set(i, list.get(idx));
list.set(idx, t);
}
LinkedList<TreeNode> t = cur;
cur = pre;
pre = t;
flag = !flag;
}while(!pre.isEmpty());
}
return ans;
}
}