给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
    例如:
    给定二叉树 [3,9,20,null,null,15,7],

    3
    / \
    9 20
    / \
    15 7

    返回锯齿形层序遍历如下:

    [
    [3],
    [20,9],
    [15,7]
    ]

    1. public class TreeNode {
    2. int val;
    3. TreeNode left;
    4. TreeNode right;
    5. TreeNode () {}
    6. TreeNode (int val) {this.val = val}
    7. TreeNode (int val, TreeNode left, TreeNode right) {
    8. this.val = val;
    9. this.left = left;
    10. this.right = right;
    11. }
    12. }
    13. class Solution {
    14. public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
    15. List<List<Integer>> res = new ArrayList<>();
    16. if (root == null)
    17. return res;
    18. Queue<TreeNode> queue = new LinkedList<>();
    19. queue.add(root);
    20. boolean leftToRight = true;//从左到右
    21. while (!queue.isEmpty()) {
    22. List<Integer> list = new ArrayList<>();
    23. int n = queue.size();
    24. for (int i = 0; i < n; i++) {
    25. TreeNode node = queue.poll();
    26. if (leftToRight == true) {
    27. list.add(node.val);//如果从左到右的顺序就正着插入 list
    28. } else {
    29. list.add(0, node.val);// 否则就按照倒序插入 list
    30. }
    31. if (node.left != null) {
    32. queue.add(node.left);
    33. }
    34. if (node.right != null) {
    35. queue.add(node.right);
    36. }
    37. }
    38. leftToRight = !leftToRight;
    39. res.add(list);
    40. }
    41. return res;
    42. }
    43. }

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal
    image.png