LeetCode--HOT100题(41)

news2025/2/27 14:53:38

目录

  • 题目描述:102. 二叉树的层序遍历(中等)
    • 题目接口
    • 解题思路
    • 代码
  • PS:

题目描述:102. 二叉树的层序遍历(中等)

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

LeetCode做题链接:LeetCode-二叉树的层序遍历

示例 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

题目接口

/**
 * 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) {

    }
}

解题思路

树的层序遍历可以用BFS,因为层序遍历要求的输入结果和BFS是不同的。层序遍历要求我们区分每一层,也就是返回一个二维数组。而BFS的遍历结果是一个一维数组,无法区分每一层。

思路如下:
1.创建一个空的结果列表res,这个列表用于存储每一层节点的值。
2.创建一个队列queue,并将根节点root加入队列。
3.当队列不为空时,执行以下操作:

  • 获取当前队列的长度,即当前层的节点个数。
  • 创建一个空的列表level,用于存储当前层的节点值。
  • 遍历当前层的所有节点,对于每个节点,执行以下操作:
    • 从队列中取出一个节点,并把它的值加入到列表level中。
    • 如果这个节点有左子节点,那么将左子节点加入到队列中;如果这个节点有右子节点,那么将右子节点加入到队列中。
  • 把列表level加入到结果列表res中。

4.最后返回结果列表res,这个列表中的每个元素都是一个列表,表示树的每一层的所有节点的值。

代码

/**
 * 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>> res = new ArrayList<>();

        // 创建一个队列,用于层序遍历
        Queue<TreeNode> queue = new ArrayDeque<>();
        // 如果根节点不为空,将其加入队列
        if (root != null) {
            queue.add(root);
        }
        // 当队列不为空时,进行循环
        while (!queue.isEmpty()) {
            // 获取当前层的节点个数
            int n = queue.size();
            // 创建一个列表,用于存储当前层的节点值
            List<Integer> level = new ArrayList<>();
            // 遍历当前层的每个节点
            for (int i = 0; i < n; i++) {
                // 取出队首节点
                TreeNode node = queue.poll();
                // 将节点值加入当前层的列表
                level.add(node.val);
                // 如果当前节点的左子节点不为空,将其加入队列
                if (node.left != null) {
                    queue.add(node.left);
                }
                // 如果当前节点的右子节点不为空,将其加入队列
                if (node.right != null) {
                    queue.add(node.right);
                }
            }
            // 将当前层的节点值列表加入结果列表
            res.add(level);
        }

        // 返回结果列表
        return res;
    }
}

成功!
在这里插入图片描述

PS:

感谢您的阅读!如果您觉得本篇文章对您有所帮助,请给予博主一个喔~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/926061.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C语言进阶(6)】字符串函数的使用方法 + 模拟实现

文章目录 Ⅰ 字符操作函数⒈字符分类函数⒉字符转换函数 Ⅱ 字符串操作函数⒈strlen⒉strcpy⒊strcat⒋strcmp⒌strncpy⒍strncat⒎strncmp⒏strstr⒐strtok⒑strerror Ⅲ 模拟实现字符串函数⒈模拟实现 strlen⒉模拟实现 strcpy⒊模拟实现 strcat⒋模拟实现 strcmp⒌模拟实现 …

ABB DI651电源模块

数字输入&#xff1a; DI651模块是用于读取数字输入信号的设备。它可以接收来自传感器、开关、按钮等外部设备的数字信号。 信号类型&#xff1a; 这种模块通常可以处理不同类型的数字信号&#xff0c;例如开关信号、脉冲信号、状态信号等。 通道数量&#xff1a; DI651模块可…

浪涌保护器的工作原理和应用

浪涌保护器是一种用于限制瞬态过电压和泄放浪涌电流的装置&#xff0c;主要用于保护低压电力系统和电子设备免受雷击或其他因素引起的电压冲击的损害。浪涌保护器的工作原理是利用其内部的非线性元件&#xff0c;在正常状态下呈现高阻抗&#xff0c;不影响电路的正常运行&#…

企业财务管理,重点指标分析

一、偿债能力指标 偿债能力指标是一个企业财务管理的重要管理指标&#xff0c;是指企业偿还到期债务&#xff08;包括本息&#xff09;的能力。偿债能力指标包括短期偿债能力指标和长期偿债能力指标&#xff0c;衡量短期偿债能力的指标主要有流动比率、速动比率和现金流动负债…

PlantUML文本绘制类图

记录下文本绘制类图的语法 参考 https://juejin.cn/post/6844903731293585421 类的UML表示 使用UML表示一个类&#xff0c;主要由三部分组成。类名、属性、方法。其中属性和方法的访问修饰符用 - 、# 、 表示 private、protected、public。 如图所示&#xff0c;表示A类有一个…

1007 Maximum Subsequence Sum

Given a sequence of K integers { N1​, N2​, ..., NK​ }. A continuous subsequence is defined to be { Ni​, Ni1​, ..., Nj​ } where 1≤i≤j≤K. The Maximum Subsequence is the continuous subsequence which has the largest sum of its elements. For example, g…

电商数据采集和分析

什么是电商数据采集&#xff1f; 数据采集一般是指利用人工或者爬虫技术&#xff0c;对电商平台上的公开数据进行抓取采集&#xff0c;采集完成后&#xff0c;去除客户不需要的无关的杂质数据&#xff0c;再进行交付。 电商数据采集要注意哪些点&#xff1f; 首先是采集平台&…

vue 简单实验 自定义组件 局部注册

1.概要 2.代码 <html> </html> <script src"https://unpkg.com/vuenext" rel"external nofollow" ></script> <body><div id"counter"><component-a></component-a></div> </body&g…

【方案】安防监控EasyCVR智慧工地视频监管风险预警平台的应用

智慧工地方案是一种结合现代化技术与工地管理实践的创新型解决方案。它通过实时监控、数据分析、人工智能等技术手段&#xff0c;使工地管理更加高效、智能化。在建设智慧工地的过程中&#xff0c;除了上述提到的利用物联网技术实现设备互联、数据采集及分析以外&#xff0c;还…

快捷支付和网上支付、协议支付都有哪些区别?

协议支付是指客户通过与银行签订协议&#xff0c;将客户的银行账户连接到商户的相关账户&#xff0c;并在支付时直接输入相关账户的支付密码。通过与特定商户共同为客户提供的电子支付方式&#xff0c;客户在中国银行开立的银行账户与客户在特定商户的用户ID绑定&#xff0c;并…

华为“鸿鹄之志”:2025年L4,2030 年实现 L5,全场景AI指日可待

在第七届未来网络发展大会上&#xff0c;华为公司的彭松发表了题为《打造端到端 AI 网络&#xff0c;打通全场景 AI 能力》的主题演讲。他指出&#xff0c;AI 时代网络创新包括 Network for AI 和 AI for Network 两个方面的目标。 前者旨在构建支持AI业务的网络&#xff0c;实…

冠达管理:股票基本知识有哪些?建议新手了解!

股票教育是存在较大危险的&#xff0c;所以新手出资者在进行股票买卖之前主张先了解股票基本常识。那么股票基本常识有哪些&#xff1f;主张新手了解!下面就为大家剖析&#xff1a; 1、股票含义 股票是股份有限公司所有权的一部分&#xff0c;也是发行的所有权凭据&#xff0c…

HTTP协议初识·上篇

目录 认识URL urlencode和urldecode 如何编码解码和验证过程 一个基本的网络服务器的流程 代码验证请求与响应 准备工作 HTTPServer.hpp Protocol.hpp makefile 1请求 HTTPServer.hpp 1.0函数handlerHttp-基本流程 再次处理 HttpServer.cc(新建文件) 测试1 -- 请…

JS的事前循环Event Loop

前言 javascript是单线程脚本语言&#xff0c;并非指js只有一个线程&#xff0c;而是同一时刻只能有一个线程在工作。 js异步如何实现 如果 JS 中不存在异步&#xff0c;只能自上而下执行&#xff0c;如果上一行解析时间很长&#xff0c;那么下面的代码就会被阻塞。 对于用户…

【直接收藏】前端 VUE 高阶面试题(三)

86.说说vue生命周期&#xff0c;发送请求在生命周期的哪个阶段&#xff0c;为什么不可以是beforeMount&#xff0c;mounted中 回答&#xff1a; 1、vue的生命周期 1&#xff09;、生命周期是什么&#xff1f; Vue 实例有一个完整的生命周期&#xff0c;也就是从开始创建、初始…

C++信息学奥赛1148:连续出现的字符

代码题解&#xff1a; #include <iostream> #include <string> using namespace std; int main() {int n;// 输入一个整数ncin>>n;cin.ignore();string str1;// 输入一行字符串getline(cin,str1);for(int i0;i<str1.length();i){int a0;for(int ji;j<…

自定义拖拽功能,上下拖拽改变盒子高度

核心在于监听鼠标的move来改变div的高度&#xff0c;抽成了组件 <template><div ref"container" class"drag"><z-tooltip v-if"isShowIcon" effect"dark" content"格式化" placement"top-start"&…

Windows11 安装 nvm node版本管理工具

在 Windows 11 上安装并配置 NVM 与 Node.js 版本管理工具 引言&#xff1a; Node.js 是一款强大的开发工具&#xff0c;而版本管理工具 NVM 则可以帮助我们在不同的项目中灵活地切换和管理 Node.js 版本。本篇博客将为大家介绍如何在 Windows 11 操作系统上安装 NVM&#xff…

【Go Web 篇】从零开始:构建最简单的 Go 语言 Web 服务器

随着互联网的迅速发展&#xff0c;Web 服务器成为了连接世界的关键组件之一。而在现代编程语言中&#xff0c;Go 语言因其卓越的性能和并发能力而备受青睐。本篇博客将带你从零开始&#xff0c;一步步构建最简单的 Go 语言 Web 服务器&#xff0c;让你对 Go 语言的 Web 开发能力…

什么是确认测试报告?确认测试报告的用途和周期?

确认测试又称有效性测试&#xff0c;其任务是验证软件的功能和性能及其他特性是否与用户的要求一致。确认测试需要提供的资料包括&#xff1a; 软件需求规格说明书&#xff1a;列出了软件的功能和性能要求&#xff0c;是确认测试的依据。 确认测试计划&#xff1a;制定了确认…