给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 屏幕快照 2019-09-12 下午3.07.20

这道题和上面思路一样,只不过因为这个是要左右交替打印,节点依然是按照队列的方式每次进入队列,
只不过在出队列取值的时候,如果是正常打印,就用普通add,如果是从右向左,就用头插。这样一层的数据出队列后用头插法也能让他反过来。
import java.util.ArrayList;
import java.util.Queue;
import java.util.LinkedList;
import java.util.Collections;
import java.util.List;
public class Solution {
ArrayList<ArrayList<Integer>> list= new ArrayList();
public ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
if(pRoot == null){
return list;
}
Queue<TreeNode> q = new LinkedList();
q.offer(pRoot);
//不反转
boolean flag = false;
while(!q.isEmpty()){
int len = q.size();
ArrayList<Integer> temp = new ArrayList();
for(int i = 0;i<len;i++){
TreeNode node = q.poll();
if(node.left!=null){
q.offer(node.left);
}
if(node.right!=null){
q.offer(node.right);
}
temp.add(node.val);
}
//第一次写出错的地方:list反转要放在外面
if(flag){
Collections.reverse(temp);
}
list.add(temp);
flag = !flag;
}
return list;
}
}