1. public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
    2. List<List<Integer>> ans = new ArrayList<>();
    3. if (root == null) {
    4. return ans;
    5. }
    6. LinkedList<TreeNode> queue = new LinkedList<>();
    7. queue.offer(root);
    8. //true 左 -> 右
    9. boolean flag = true;
    10. while (!queue.isEmpty()) {
    11. int size = queue.size();
    12. LinkedList<Integer> list = new LinkedList<>();
    13. for (int i = 0; i < size; i++) {
    14. TreeNode node = queue.poll();
    15. if (flag) {
    16. list.offerLast(node.val);
    17. } else {
    18. list.offerFirst(node.val);
    19. }
    20. if (node.left != null) {
    21. queue.offer(node.left);
    22. }
    23. if (node.right != null) {
    24. queue.offer(node.right);
    25. }
    26. }
    27. flag = !flag;
    28. ans.add(list);
    29. }
    30. return ans;
    31. }