leecode刷题 二叉树的层级遍历

简介: 层序遍历二叉树,即按层次从左到右访问所有节点。给定二叉树的根节点 `root`,返回其节点值的层序遍历结果。每个层级的节点值存储在一个子列表中,最终返回一个包含这些子列表的列表。解决方案使用递归方法,通过 `Map` 记录每一层的节点值,最后将各层的结果按顺序加入最终结果列表中。

给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。

示例 1:
image.png

输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]
示例 2:

输入:root = [1]
输出:[[1]]
示例 3:

输入:root = []
输出:[]

提示:

树中节点数目在范围 [0, 2000] 内
-1000 <= Node.val <= 1000

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 * int val;
 * TreeNode left;
 * TreeNode right;
 * TreeNode() {}
 * TreeNode(int val) { this.val = val; }
 * TreeNode(int val, TreeNode left, TreeNode right) {
 * this.val = val;
 * this.left = left;
 * this.right = right;
 * }
 * }
 */
class Solution {
   
    public List<List<Integer>> levelOrder(TreeNode root) {
   
        List<List<Integer>> nums = new ArrayList();
        Map<Integer, List<Integer>> map = new HashMap();
        int level = 0;

        map = getLevelSub(root, level, map);
        for (int i = 0; i < map.size(); i++) {
   
            nums.add(map.get(i));
        }

        return nums;
    }

    public Map<Integer, List<Integer>> getLevelSub(TreeNode root, int level, Map<Integer, List<Integer>> map) {
   
        if (root == null) {
   
            return map;
        }
        if (!map.containsKey(level)) {
   
            map.put(level, new ArrayList());
        }
        map.get(level).add(root.val);
        getLevelSub(root.left, level + 1, map);
        getLevelSub(root.right, level + 1, map);
        return map;
    }
}

问题关键点在于,如何构建每个层级的数组,开始的时候,我希望一次搞定,通过数组合并的方式,数据合并有个问题,我必须知道要合并的数组是哪些,这个在递归的过程会丢失.转换思路,其实只要知道每个数组的索引即可,数组的索引其实就是二叉树的层数,使用map记录层数,就可以解决这个问题

相关文章
|
关系型数据库 MySQL 数据库
rds迁移数据迁移工具选择
rds迁移数据迁移工具选择
646 3
|
4月前
|
JSON 监控 API
掌握使用 requests 库发送各种 HTTP 请求和处理 API 响应
本课程全面讲解了使用 Python 的 requests 库进行 API 请求与响应处理,内容涵盖环境搭建、GET 与 POST 请求、参数传递、错误处理、请求头设置及实战项目开发。通过实例教学,学员可掌握基础到高级技巧,并完成天气查询应用等实际项目,适合初学者快速上手网络编程与 API 调用。
513 130
|
5月前
|
机器学习/深度学习 存储 JSON
PyCharm 创建了第一个项目
在 PyCharm 中创建项目时,合理的目录结构有助于代码、依赖和资源的高效管理。本文详细解析了 PyCharm 的默认目录结构,如 `.idea/`(配置文件)、`venv/`(虚拟环境)、`src/`(源代码)、`tests/`(测试代码)、`data/`(数据文件)等,并提供了文件创建建议和最佳实践。同时介绍了核心代码、脚本文件、测试文件的存放位置,以及 PyCharm 的常用操作技巧,帮助开发者构建清晰、可维护的项目结构。
290 2
|
5月前
|
机器学习/深度学习 人工智能 PyTorch
GPT为定制AI应用工程师转型第一周学习计划
本计划帮助开发者快速入门AI领域,首周涵盖AI基础理论、Python编程及PyTorch实战。前两天学习机器学习、深度学习与Transformer核心概念,掌握LLM工作原理。第三至四天快速掌握Python语法与Jupyter使用,完成基础编程任务。第五至七天学习PyTorch,动手训练MNIST手写识别模型,理解Tensor操作与神经网络构建。
261 0
|
4月前
|
人工智能 自然语言处理 Java
从 Java 到 AI:三周求职冲刺打卡,步步为营拿 offer
本计划帮助具备Java、.NET、Vue背景的开发者三周内转型为AI应用工程师,专注实战,聚焦模型调用、RAG、Prompt工程等技能,完成多个AI应用项目,打造可用于求职的简历与作品集。
365 9
|
5月前
|
缓存 JSON 数据库
检验你的fastapi掌握了吗
本内容系统讲解了 FastAPI 的核心功能与高级应用,包括路径参数定义、类型验证、Pydantic 模型、依赖注入、异步处理、权限校验、CORS 配置、错误处理、文档生成及性能优化等内容,适用于构建高效、可维护的现代 Web API 服务。
218 7
|
5月前
|
Shell 网络安全 开发工具
项目快速导入git
本文介绍了如何在本地初始化 Git 仓库并将代码提交到远程仓库(如 GitHub 或 Gitee)的基本流程。内容包括安装 Git、创建仓库、添加文件、提交更改以及推送代码到远程仓库的详细步骤,适合初学者快速掌握 Git 的基本使用方法。
275 1
|
5月前
|
机器学习/深度学习 人工智能 PyTorch
三周内转型AI工程师学习计划
3周AI转型计划:掌握数学、机器学习与深度学习基础,熟练使用Python、PyTorch/TensorFlow。完成2-3个CV/NLP项目,构建GitHub博客,强化LeetCode刷题与模拟面试。每日高效学习9小时,聚焦实战与面试准备,助力快速入行AI。
371 0
|
10月前
|
编解码 算法 数据安全/隐私保护
基于FPGA的信号DM编解码实现,包含testbench和matlab对比仿真
本项目展示了DM编解码算法的实现与测试结果。FPGA测试结果显示为T1,Matlab仿真结果为T2。使用软件版本为Matlab 2022a和Vivado 2019.2。核心程序包含详细中文注释和操作视频。DM编解码通过比较信号样本差值进行编码,适用于音频等低频信号处理。硬件结构包括编码器(采样器、减法器、比较器)和解码器(解码器、积分器)。
|
算法
比较for、for...in、for...of、forEach的区别
【10月更文挑战第9天】
597 139