当前位置: 首页 > ops >正文

记录算法笔记(2025.5.15)二叉树的层序遍历

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

示例 1:

输入: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

思路:

1. 检查根节点是否为空

如果根节点为空,直接返回一个空的二维列表,因为没有节点可以遍历。

2. 初始化队列和结果列表
  • 创建一个队列,将根节点加入队列,用于逐层处理节点。

  • 创建一个结果列表,用于存储每一层的节点值。

3. 开始层序遍历

使用一个循环,条件是队列不为空。循环体内的操作代表处理一层的节点。

4. 处理当前层的节点
  • 获取当前层的节点数量:通过队列的长度确定当前层有多少个节点。

  • 创建一个列表存储当前层的节点值:用于临时存储当前层的节点值。

  • 逐个处理当前层的节点

    • 从队列中依次取出节点。

    • 将节点的值加入当前层的列表。

    • 检查当前节点是否有左子节点或右子节点:

      • 如果有左子节点,将其加入队列。

      • 如果有右子节点,也将其加入队列。

  • 将当前层的节点值列表加入结果列表:完成当前层的处理后,将存储当前层节点值的列表加入最终的结果列表。

5. 重复处理下一层

继续循环,处理下一层的节点,直到队列为空,表示所有层的节点都已处理完毕。

6. 返回结果

最终返回包含所有层节点值的二维列表。

代码:C#

public class Solution {
    public IList<IList<int>> LevelOrder(TreeNode root) {
        // 如果根节点为空,返回空列表
        if (root == null) {
            return new List<IList<int>>();
        }

        // 初始化队列和结果列表
        Queue<TreeNode> queue = new Queue<TreeNode>();
        queue.Enqueue(root);
        IList<IList<int>> ans = new List<IList<int>>();

        // 开始层序遍历
        while (queue.Count > 0) {
            // 获取当前层的节点数量
            int len = queue.Count;
            // 创建一个列表存储当前层的节点值
            List<int> currentLevel = new List<int>();

            // 遍历当前层的所有节点
            for (int i = 0; i < len; i++) {
                // 从队列中取出节点
                TreeNode node = queue.Dequeue();
                // 将节点值加入当前层的列表
                currentLevel.Add(node.val);

                // 如果左子节点不为空,加入队列
                if (node.left != null) {
                    queue.Enqueue(node.left);
                }
                // 如果右子节点不为空,加入队列
                if (node.right != null) {
                    queue.Enqueue(node.right);
                }
            }

            // 将当前层的节点值列表加入结果列表
            ans.Add(currentLevel);
        }

        // 返回最终结果
        return ans;
    }
}

http://www.xdnf.cn/news/6477.html

相关文章:

  • RK3588 桌面系统配置WiFi和蓝牙配置
  • SQL优化总结
  • vue使用vite, 渲染glb模型时报错
  • 【GESP真题解析】第 9 集 GESP 一级 2023 年 9 月编程题 2:小明的幸运数
  • 检测按键抖动的时间
  • ivx 开发者如何通过 BI 引擎实现应用功能精准优化
  • 深光-谷歌TV TADA/奈飞Netflix/亚马逊Prime Video/YouTube等测试外包服务
  • 【蓝桥杯嵌入式】【模块】四、按键相关配置及代码模板
  • 【数据结构】队列
  • 如何在WooCommerce中设置Stripe
  • 了解光学影像
  • Cinema4D 26.014
  • 软考软件评测师——计算机组成与体系结构(CPU指令系统)
  • SPL做量化---DMI(动向指标)
  • jq安装与使用
  • 麒麟系统进入bios的方法
  • 4.6/Q1,GBD数据库最新文章解读
  • 基于YOLOv5的葡萄病害智能识别系统开发实践
  • 从单线程到多线程:项目实战web Worker线程使用总结
  • idea常用插件
  • 通义灵码 2.5.4 版【**编程智能体**】初体验
  • worldquant rank函数
  • PH热榜 | 2025-05-15
  • # 基于Python的多摄像头监控与OCR识别系统
  • 修改一个表的相关操作语句
  • “DiT和Flux”与“Stable Diffusion”两种不同的生成模型范式
  • Vue中的自定义指令适用于哪些场景
  • 如何在 Windows 命令提示符中创建多个文件夹和多个文件
  • Python3 简易DNS服务器实现
  • redis持久化方式