← [ BACK_TO_NOTES ]

Binary Tree Level-Order Traversal

LeetCode 102 二叉树层序遍历:两种写法(带 level 映射 vs 按层处理)。

#algorithm #snippet #evergreen #tree #bfs #leetcode

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

Binary Tree Level-Order Traversal

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

推荐写法:按层处理(levelSize)

每一轮先取当前队列长度 size,这一轮只弹出 size 个节点,天然形成一层。

import java.util.*;

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

        Queue<TreeNode> q = new LinkedList<>();
        q.add(root);
        while (!q.isEmpty()) {
            int size = q.size();
            List<Integer> level = new ArrayList<>();
            for (int i = 0; i < size; i++) {
                TreeNode cur = q.poll();
                level.add(cur.val);
                if (cur.left != null) q.add(cur.left);
                if (cur.right != null) q.add(cur.right);
            }
            ans.add(level);
        }
        return ans;
    }
}

备选写法:记录 level(不太推荐)

当需要单独查询节点层数时可以使用映射;只输出层序分组时,按层处理已经足够。下面的 HashMap 依赖题目 TreeNode 默认按对象身份区分,不能按节点值合并。

import java.util.*;

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

        Queue<TreeNode> q = new LinkedList<>();
        Map<TreeNode, Integer> levelMap = new HashMap<>();
        q.add(root);
        levelMap.put(root, 0);

        while (!q.isEmpty()) {
            TreeNode cur = q.poll();
            int level = levelMap.get(cur);
            if (ans.size() == level) ans.add(new ArrayList<>());
            ans.get(level).add(cur.val);

            if (cur.left != null) {
                q.add(cur.left);
                levelMap.put(cur.left, level + 1);
            }
            if (cur.right != null) {
                q.add(cur.right);
                levelMap.put(cur.right, level + 1);
            }
        }
        return ans;
    }
}

两个 Java 代码块是独立备选 Solution,TreeNode 由题目提供。两者时间 O(n);按层法队列 O(w),映射法额外保存 O(n) 个层数,输出均为 O(n)。w 为最大层节点数,size 必须在处理当前层之前固定,不能随入队动态增长。

创建于 2026/3/16 更新于 2026/10/7
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本