算法的学习笔记—把二叉树打印成多行(牛客JZ78)

😀前言
在算法面试中,二叉树的层序遍历是一个经典的题目。而这道题的要求是进一步将二叉树的每一层结点值打印成多行,即同一层结点从左至右输出,最终结果存放到一个二维数组中返回。接下来,我们将通过代码实例详细解析解题思路。
🏠个人主页:尘觉主页
文章目录
- 😊把二叉树打印成多行
- 🥰题目描述
- 数据范围
- 要求
- 😋示例
- 示例1
- 示例2
- 示例3
- 示例4
- 🤔解题思路
- 😉代码实现
- 详细解析
- 😄总结
😊把二叉树打印成多行
NowCoder
🥰题目描述
给定一个节点数为 n 的二叉树,要求从上到下按层打印二叉树的 val 值,同一层节点从左至右输出,每一层输出一行,将输出的结果存放到一个二维数组中返回。
以二叉树 {1,2,3,#,#,4,5} 为例,它的层序遍历结果如下:
[[1],[2,3],[4,5]
]

数据范围
- 二叉树的节点数
0 ≤ n ≤ 1000 - 每个节点的值
0 ≤ val ≤ 1000
要求
- 时间复杂度:
O(n) - 空间复杂度:
O(n)
😋示例
示例1
输入:{1,2,3,#,#,4,5}
返回值:[[1],[2,3],[4,5]]
示例2
输入:{8,6,10,5,7,9,11}
返回值:[[8],[6,10],[5,7,9,11]]
示例3
输入:{1,2,3,4,5}
返回值:[[1],[2,3],[4,5]]
示例4
输入:{}
返回值:[]
🤔解题思路
要实现这一功能,我们可以借助广度优先搜索(BFS)来逐层遍历二叉树。BFS 通常使用队列来实现。具体步骤如下:
- 队列初始化:首先,将二叉树的根节点放入队列。
- 逐层遍历:循环遍历队列,每次从队列中取出当前层的所有节点,记录它们的值,并将其左右子节点依次加入队列,以便下一次循环遍历。
- 存储每层节点:在遍历每层节点时,将当前层的节点值存入一个列表,然后将这个列表添加到最终的结果二维数组中。
- 处理空树的情况:如果输入的树为空,则返回一个空的结果数组。
😉代码实现
下面是使用 Java 实现的完整代码:
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;public class Solution {public ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {// 初始化一个二维数组来保存最终结果ArrayList<ArrayList<Integer>> ret = new ArrayList<>();// 初始化一个队列用于层序遍历Queue<TreeNode> queue = new LinkedList<>();// 将根节点加入队列queue.add(pRoot);// 当队列不为空时,继续进行遍历while (!queue.isEmpty()) {// 用于存储当前层的节点值ArrayList<Integer> list = new ArrayList<>();// 当前层的节点数量int cnt = queue.size();// 遍历当前层的所有节点while (cnt-- > 0) {// 取出队列中的节点TreeNode node = queue.poll();// 如果节点为空,则跳过if (node == null)continue;// 将节点的值加入当前层的列表list.add(node.val);// 将节点的左子节点加入队列queue.add(node.left);// 将节点的右子节点加入队列queue.add(node.right);}// 如果当前层有节点,将其加入最终结果if (list.size() != 0)ret.add(list);}// 返回最终结果return ret;}
}
详细解析
- Queue 数据结构:我们使用
Queue<TreeNode>来保存每一层的节点。在每一层开始时,队列中包含了所有该层的节点。 - 层序遍历:通过
queue.size()获取当前层的节点数量,并使用一个循环来遍历这些节点。在遍历过程中,将当前节点的左右子节点依次加入队列。 - 结果存储:每一层遍历完后,我们将当前层的节点值列表
list添加到结果数组ret中。 - 边界条件:如果
queue中没有元素,即队列为空时,表示树已经遍历完毕,退出循环。
😄总结
这个解法的核心是利用队列来实现二叉树的层序遍历。通过逐层记录节点值,我们能够按照题目要求将每一层节点的值按行输出,并最终返回一个包含多行的二维数组。该解法具有良好的时间和空间复杂度,适用于题目要求的节点数量范围。
😁热门专栏推荐
想学习vue的可以看看这个
java基础合集
数据库合集
redis合集
nginx合集
linux合集
手写机制
微服务组件
spring_尘觉
springMVC
mybits
等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持
🤔欢迎大家加入我的社区 尘觉社区
文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论😁
希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

相关文章:
算法的学习笔记—把二叉树打印成多行(牛客JZ78)
😀前言 在算法面试中,二叉树的层序遍历是一个经典的题目。而这道题的要求是进一步将二叉树的每一层结点值打印成多行,即同一层结点从左至右输出,最终结果存放到一个二维数组中返回。接下来,我们将通过代码实例详细解析…...
FreeRTOS 时间管理
延时函数介绍 函数 描述 vTaskDelay() 相对延时 xTaskDelayUntil() 绝对延时 相对延时:指每次延时都是从执行函数vTaskDelay()开始,直到延时指定的时间结束 绝对延时:指将整个任务的运行周期看成一个整体,适用于需要按…...
F. Valuable Cards D. Smithing Skill
D题 F题 F题: 因为是连续的且都要选,我们直接从左到右去取每个区间到不合法的情况即可,可以在n1的位置添加一个x来结束区间判断。因为是要乘积为x,那么我们只需要放x的因子进去,不然会超时,同时也可以用v…...
【电子通识】IPC-A-600中对验收标准的定义
在文章【电子通识】IPC-A-610标准对产品的四种验收条件都是什么意思?中我们讲到IPC-A-610标准(电子组件的可接受性)对于产品的四种验收条件。本文中我们同理讲一讲IPC-A-600中对验收标准的定义。 IPC-A-600文件中的多数示意图和照片同时表示每…...
MyBatis(初阶)
1.什么是MyBtis MyBatis是持久层框架,⽤于简化JDBC的开发。 2.准备工作 2.1 创建⼯程 数据库: 2.2 配置数据库连接字符串 以application.yml⽂件为例: 2.3 写持久层代码 Data public class UserInfo {private Integer id;private String username;private Stri…...
KDP数据平台:以实战案例验证技术领先力
本文由智领云 LeetTools 工具自动生成 申请试用: https://www.leettools.com/feedback/ 在当今快速发展的技术环境中,数据平台的选择对企业的数字化转型和业务发展至关重要。智领云开源KDP(Kubernetes Data Platform)在数据处理和…...
[Linux] 什么是 Shell?
一、什么是 shell ? shell在英语中的意思就是外壳,所以我们习惯称shell程序为壳程序。那为什么又会被叫做壳程序呢?那是因为shell程序是在内核上面的,属于操作系统的外壳部分,因此我们就称之为壳程序(shell)。 在 Linux 中&#…...
大模型学习应用 2:快速上手大模型基于langchain实现RAG检索应用
快速上手大模型基于langchain实现RAG检索应用 - 项目作业 目录 准备工作镜像选择算力选择安装包数据说明提示参考链接 Task1 申请 api 后,使用 langchain 导入大模型,并打印出大模型信息Task2 使用 langchian 加载数据,并把数据打印出来Task…...
python环境安装之后,cmd输入python回车会打开微软商店
坑爹!python环境安装之后,cmd输入python回车会打开微软商店 最近发现,安装python环境成功之后,可能会出现cmd输入python验证是否安装成功老会打开微软商店! 解决,打开系统环境配置,找到刚安装…...
USB Type-C如何取9V、12V、15V、20V电压-PD快充协议芯片ECP5701
相信大家在生活中也发现了,现在越来越多的设备都改用这种type-C接口的母座进行取电了。 因为欧盟决议 :自2024年起部分消费电子产品必须提供单一的USB-C充电接口。 那么这种type-C接口相比之前的Micro-B接口有着一个很大的优势就是可以有更高的电压&…...
Go 语言 Map 17
Go 语言提供了一个强大的 Map 结构体,用于存储键值对。Map 可以用来存储数据,快速查找和修改数据。下面是 Go 语言 Map 的使用教程。 什么是 Map? Map 是一个键值对的集合,它可以存储任意类型的键和值。Map 中的每个键都是唯一的…...
移植bash到openharmony
1.交叉工具链 下载地址: http://ci.openharmony.cn/workbench/cicd/dailybuild/dailylist 进入ohos-sdk-full,下载一个sdk版本,这里下载的版本是version-Master_Version-OpenHarmony_5.0.0.35-20240805_020232-ohos-sdk-full.tar.gz。 解…...
git stash详细教程
git stash详细教程 基本命令: git stash: 保存当前未提交的更改,并恢复到干净的工作目录。git stash list: 列出所有的 stash。git stash show: 显示最新 stash 的简要内容。git stash show -p: 显示最新 stash 的详细内容。 应用和删除: git stash apply: 应用最新…...
UDP网络攻击
UDP(User Datagram Protocol)作为一种无连接的网络传输协议,以其速度快和资源消耗小的特点,在多种网络服务中发挥着重要作用,UDP的无连接特性也使其成为DDoS攻击的优选协议。 UDP攻击概念 UDP攻击是一种网络攻击手段…...
漏洞扫描的重要性,如何做好漏洞扫描服务
随着互联网技术的飞速发展,网络安全问题已成为不容忽视的重大挑战。其中,系统漏洞威胁作为最常见且严重的安全危险之一,对组织和个人的信息资产构成了巨大威胁。下面我们就来了解下漏洞扫描的好处、漏洞扫描的操作方法以及如何做好网络安全。…...
unity程序简易框架
1. 框架基本结构 2. 单例模式基类模块 2.1 BaseManager.cs using System.Collections; using System.Collections.Generic; using UnityEngine;public class BaseManager<T> where T:new() {private static T instance;public static T GetInstance(){if (instance == …...
Go小技巧易错点100例(十六)
本期看点: 正文开始: 切片的长度和容量 在Go语言中,切片(slice)是一个引用类型,它是对底层数组的抽象表示,提供了动态长度的、灵活的序列类型。切片包含三个重要的属性:指向底层数…...
通过Golang实现中间人攻击,查看和修改https流量包
要查看和修改 HTTPS 流量包,需要使用一个能够执行 中间人攻击(Man-in-the-Middle, MITM) 的代理工具。这个工具将拦截并解密 HTTPS 流量,然后允许查看和修改流量包的内容,再将其重新加密并发送到目标服务器。 完整的 …...
MySQL 安装与配置指南
MySQL 是一种广泛使用的关系型数据库管理系统,为各种应用程序提供高效的数据存储和管理解决方案。本文将介绍如何在不同的操作系统中安装 MySQL,以及如何进行基本的配置,以确保数据库系统的最佳性能和稳定性。 一、环境准备 1.1 系统要求 …...
android13布局查看工具 无源码查看布局 在线查找ui布局id
总纲 android13 rom 开发总纲说明 目录 1.前言 2.工具介绍 2.1工具1 2.2工具2 2.3工具3 2.4工具4 3.彩蛋 1.前言 Android 13提供了一些工具来帮助开发人员查看和优化应用的布局。方便的让我们找到具体应用的布局文件等信息。 2.工具介绍 2.1工具1 老版本DDMS&#x…...
【CP AUTOSAR】Icu驱动模块:从原理到实战的配置与优化指南
1. Icu驱动模块在AUTOSAR架构中的核心作用 第一次接触AUTOSAR的Icu模块时,我完全被它复杂的配置项搞懵了。直到在S32K3项目上实际调试电机转速测量功能,才真正理解这个模块的价值。简单来说,Icu就像汽车电子系统的"脉搏检测仪"&…...
Rivets.js格式化器深度解析:自定义数据转换和业务逻辑处理
Rivets.js格式化器深度解析:自定义数据转换和业务逻辑处理 【免费下载链接】rivets Lightweight and powerful data binding. 项目地址: https://gitcode.com/gh_mirrors/ri/rivets Rivets.js是一个轻量级且功能强大的数据绑定库,它提供了灵活的格…...
基于反馈线性化与滑模鲁棒控制的综合策略:FLSMRC技术及其在Simulink中的应用
基于反馈线性化的滑模鲁棒控制/FLSMRC 线性化反馈需要精确的模型参数,而且无法克服外界扰动,所以需要引入具有鲁棒性特点的滑模控制,之后基于线性化反馈的滑模控制便可以用于参数不定及抵抗外界扰动。 在simulink中以模块图形式搭建的&#x…...
Xilinx FPGA除法器IP核(divider)的三种算法模式对比:资源占用与延迟周期的实战测试
Xilinx FPGA除法器IP核的三种算法模式深度解析:从理论到实战的资源与延迟优化 在数字信号处理、通信系统和图像处理等FPGA应用场景中,除法运算往往是性能瓶颈所在。与加法器和乘法器不同,除法器在硬件实现上更为复杂,需要权衡计算…...
NAT技术实战解析:从基础配置到高级应用
1. NAT技术入门:从零开始理解地址转换 第一次接触NAT这个概念时,我正被公司派去解决一个棘手的网络问题——办公室里的打印机突然无法被外部分支机构访问。折腾了半天才发现,原来是路由器的NAT配置被误改了。这次经历让我深刻体会到ÿ…...
如何构建终极智能电池管理系统:DIY爱好者的完整解决方案
如何构建终极智能电池管理系统:DIY爱好者的完整解决方案 【免费下载链接】SmartBMS Open source Smart Battery Management System 项目地址: https://gitcode.com/gh_mirrors/smar/SmartBMS 在当今能源转型的时代,锂电池已成为从电动汽车到家庭储…...
复古玩法:OpenClaw+Qwen3.5-9B模拟操作Windows 98怀旧游戏
复古玩法:OpenClawQwen3.5-9B模拟操作Windows 98怀旧游戏 1. 为什么选择Windows 98游戏作为测试场景 最近在整理旧硬盘时,偶然发现了一批Windows 98时代的经典游戏安装包。这些20年前的老游戏不仅界面风格复古,操作方式也与现代软件大相径庭…...
Nucleus Co-Op:突破单机游戏限制的多人分屏革新工具
Nucleus Co-Op:突破单机游戏限制的多人分屏革新工具 【免费下载链接】nucleuscoop Starts multiple instances of a game for split-screen multiplayer gaming! 项目地址: https://gitcode.com/gh_mirrors/nu/nucleuscoop 你是否曾遇到这样的困境࿱…...
【FastAPI 2.0流式AI响应实战指南】:3步接入、5大避坑点、性能提升300%的工业级落地方案
第一章:FastAPI 2.0流式AI响应的核心演进与工业价值FastAPI 2.0 将原生流式响应能力从实验性支持升级为一级公民特性,彻底重构了高吞吐 AI 服务的构建范式。其核心在于深度整合 ASGI 3.0 的异步流语义与 Starlette 的 StreamingResponse 基础设施&#x…...
智能+OpenCore EFI配置工具:OpCore-Simplify让黑苹果搭建效率提升300%+
智能OpenCore EFI配置工具:OpCore-Simplify让黑苹果搭建效率提升300% 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify OpCore-Simplify是一…...
