Binary Tree Zigzag Level-Order Traversal

LeetCode 103 二叉树锯齿形层序遍历:按层 BFS,奇偶层控制方向。

#resource / algorithm #type / howto #status / evergreen #ds / tree #algo / bfs #source / leetcode

[!info] related notes 算法面试题型 MOC 二叉树高频题

Binary Tree Zigzag Level-Order Traversal

LeetCode: https://leetcode.cn/problems/binary-tree-zigzag-level-order-traversal/

思路

  • 仍然是标准 BFS 按层处理。
  • level 层:
    • 偶数层:从左到右写入。
    • 奇数层:从右到左写入。

实现技巧:

  • 预分配数组 level = new Array(size),按位置写入:
    • idx = leftToRight ? i : (size - 1 - i)

Java Template

import java.util.*;

class Solution {
    public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
        List<List<Integer>> ans = new ArrayList<>();
        if (root == null) return ans;

        Queue<TreeNode> q = new LinkedList<>();
        q.add(root);
        boolean leftToRight = true;

        while (!q.isEmpty()) {
            int size = q.size();
            Integer[] level = new Integer[size];
            for (int i = 0; i < size; i++) {
                TreeNode cur = q.poll();
                int idx = leftToRight ? i : (size - 1 - i);
                level[idx] = cur.val;
                if (cur.left != null) q.add(cur.left);
                if (cur.right != null) q.add(cur.right);
            }
            ans.add(Arrays.asList(level));
            leftToRight = !leftToRight;
        }
        return ans;
    }
}
创建于 2026/3/16 更新于 2026/5/27