package com.heu.wsq.leetcode.tree;
import java.util.*;
/**
* 103. 二叉树的锯齿形层序遍历
* @author wsq
* @date 2020/12/22
* 给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
*
* 例如:
* 给定二叉树 [3,9,20,null,null,15,7],
* 3
* / \
* 9 20
* / \
* 15 7
*
* 返回锯齿形层序遍历如下:
* [
* [3],
* [20,9],
* [15,7]
* ]
*
* 链接:https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal
*/
public class ZigzagLevelOrder {
public List<List<Integer>> zigzagLevelOrder(TreeNode root){
List<List<Integer>> ans = new ArrayList<>();
if (root == null){
return ans;
}
int left = 0;
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
while (!queue.isEmpty()){
int size = queue.size();
Deque<Integer> tempList = new LinkedList<>();
for (int i = 0; i < size; i++){
TreeNode poll = queue.poll();
if (left == 1){
tempList.offerFirst(poll.val);
}else{
tempList.offerLast(poll.val);
}
if (poll.left != null) {
queue.offer(poll.left);
}
if (poll.right != null){
queue.offer(poll.right);
}
}
ans.add(new ArrayList<>(tempList));
left ^= 1;
}
return ans;
}
}