给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:[[3],[20,9],[15,7]]
示例 2:
输入:root = [1]
输出:[[1]]
示例 3:
输入:root = []
输出:[]
注意点:关于顺序的问题
1.removeFirst()永远是和addLast()搭配,removeLast()永远是和addFirst()搭配
不可能是removerLast()和addLast()搭配,这样不就混了么~
2.搞清楚1后,剩下的就是先判断right还是先判断left,这可以先做个假设,假设先判断right,然后自己画一下,这样是对的还是错的,错的画再改,另外一个就是反过来~
class Solution {
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
ArrayList<List<Integer>> result = new ArrayList<>();
if(root == null){
return result;
}
LinkedList<TreeNode> queue = new LinkedList<>();
queue.offer(root);
//表示当前序列为正序还是倒序
boolean order = true;
while(!queue.isEmpty()){
int size = queue.size();
ArrayList<Integer> list = new ArrayList<>();
for(int i = 0; i < size; i++){
if(!order){
//当前序列为倒序,下一次序列为正序
TreeNode node = queue.removeFirst();
list.add(node.val);
if(node.right != null){
queue.addLast(node.right);
}
if(node.left != null){
queue.addLast(node.left);
}
}else{
//当前序列为正序,下一次序列为倒序,注意添加顺序
TreeNode node = queue.removeLast();
list.add(node.val);
if(node.left != null){
queue.addFirst(node.left);
}
if(node.right != null){
queue.addFirst(node.right);
}
}
}
order = !order;
result.add(list);
}
return result;
}
}