题目描述
题目链接:103. 二叉树的锯齿形层序遍历
给你二叉树的根节点 root
,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
示例1:

1 2
| 输入:root = [3,9,20,null,null,15,7] 输出:[[3],[20,9],[15,7]]
|
示例2:
示例3:
提示:
- 树中节点数目在范围
[0, 2000]
内
-100 <= Node.val <= 100
我的题解
方法一:层序遍历
思路
普通层序遍历即可,注意单数层顺序添加元素,双数层逆向添加元素即可
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| class Solution { public List<List<Integer>> zigzagLevelOrder(TreeNode root) { if (root == null) { return new ArrayList<>(); } Queue<TreeNode> queue = new ArrayDeque<>(); List<List<Integer>> result = new ArrayList<>(); queue.offer(root); while (!queue.isEmpty()) { LinkedList<Integer> r = new LinkedList<>(); for (int i = queue.size() - 1; i >= 0; i--) { TreeNode poll = queue.poll(); if ((result.size() & 1) == 0) { r.addLast(poll.val); } else { r.addFirst(poll.val); } if (poll.left != null) { queue.offer(poll.left); } if (poll.right != null) { queue.offer(poll.right); } } result.add(r); } return result; } }
|
结果
执行用时:1 ms, 在所有 Java 提交中击败了69.28%的用户
内存消耗:40.2 MB, 在所有 Java 提交中击败了57.76%的用户