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

img

😀前言
在算法面试中,二叉树的层序遍历是一个经典的题目。而这道题的要求是进一步将二叉树的每一层结点值打印成多行,即同一层结点从左至右输出,最终结果存放到一个二维数组中返回。接下来,我们将通过代码实例详细解析解题思路。

🏠个人主页:尘觉主页

文章目录

  • 😊把二叉树打印成多行
    • 🥰题目描述
      • 数据范围
      • 要求
    • 😋示例
      • 示例1
      • 示例2
      • 示例3
      • 示例4
    • 🤔解题思路
    • 😉代码实现
      • 详细解析
    • 😄总结

😊把二叉树打印成多行

NowCoder

🥰题目描述

给定一个节点数为 n 的二叉树,要求从上到下按层打印二叉树的 val 值,同一层节点从左至右输出,每一层输出一行,将输出的结果存放到一个二维数组中返回。

以二叉树 {1,2,3,#,#,4,5} 为例,它的层序遍历结果如下:

[[1],[2,3],[4,5]
]

img

数据范围

  • 二叉树的节点数 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 通常使用队列来实现。具体步骤如下:

  1. 队列初始化:首先,将二叉树的根节点放入队列。
  2. 逐层遍历:循环遍历队列,每次从队列中取出当前层的所有节点,记录它们的值,并将其左右子节点依次加入队列,以便下一次循环遍历。
  3. 存储每层节点:在遍历每层节点时,将当前层的节点值存入一个列表,然后将这个列表添加到最终的结果二维数组中。
  4. 处理空树的情况:如果输入的树为空,则返回一个空的结果数组。

😉代码实现

下面是使用 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;}
}

详细解析

  1. Queue 数据结构:我们使用 Queue<TreeNode> 来保存每一层的节点。在每一层开始时,队列中包含了所有该层的节点。
  2. 层序遍历:通过 queue.size() 获取当前层的节点数量,并使用一个循环来遍历这些节点。在遍历过程中,将当前节点的左右子节点依次加入队列。
  3. 结果存储:每一层遍历完后,我们将当前层的节点值列表 list 添加到结果数组 ret 中。
  4. 边界条件:如果 queue 中没有元素,即队列为空时,表示树已经遍历完毕,退出循环。

😄总结

这个解法的核心是利用队列来实现二叉树的层序遍历。通过逐层记录节点值,我们能够按照题目要求将每一层节点的值按行输出,并最终返回一个包含多行的二维数组。该解法具有良好的时间和空间复杂度,适用于题目要求的节点数量范围。

😁热门专栏推荐
想学习vue的可以看看这个

java基础合集

数据库合集

redis合集

nginx合集

linux合集

手写机制

微服务组件

spring_尘觉

springMVC

mybits

等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持

🤔欢迎大家加入我的社区 尘觉社区

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论😁
希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

img

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是光伏气象站—光伏气象站的简述

随着全球对可再生能源需求的日益增长&#xff0c;光伏发电作为清洁、可再生的能源形式&#xff0c;正逐步成为能源结构转型的重要力量。然而&#xff0c;光伏电站的发电效率受到多种气象因素的影响&#xff0c;如太阳辐射强度、温度、风速、湿度等。为了最大化光伏系统的发电潜…

C/C++ 多线程[1]---线程创建+线程释放+实例

文章目录 前言1. 多线程创建2. 多线程释放3. 实例总结 前言 说来惭愧&#xff0c;写了很久的代码&#xff0c;一个单线程通全部。可能是接触的项目少吧&#xff0c;很多多线程的概念其实都知道&#xff0c;但是实战并没有用上。前段时间给公司软件做一个进度条&#xff0c;涉及…

Java 2.4 - JVM

一、Java 内存区域详解&#xff08;重点&#xff09; 本篇讨论的是 HotSpot 虚拟机 相比于 C 而言&#xff0c;程序员不需要对每个 new 操作都写对应的 delete / free 操作&#xff0c;这些操作我们会交给虚拟机去做。因此&#xff0c;如果不了解虚拟机的原理&#xff0c;一旦…

【Vue3】集成 Ant Design Vue

【Vue3】集成 Ant Design Vue 背景简介开发环境开发步骤及源码总结 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗…

Android TableLayout中TextView文本不居中问题

概述 | 平台 RK3288 Android 8.1 compileSdkVersion 26. | 问题 使用了TableLayout布局电话的拨号按键界面, 效果如下图 (正常): 在后续开发过程的某次修改后, 出现效果图(不正常): 合并两张效果图可看得更明显(红线参考位置): 在布局中 TextView 的 android:g…

SEO优化:如何优化自己的文章,解决搜索引擎不收录的问题

可以使用bing的URL检查&#xff0c;来检查自己的文章是不是负荷收录准测&#xff0c;如果页面有严重的错误&#xff0c;搜索引擎是不会进行收录的&#xff0c;而且还会判定文章为低质量文章&#xff01; 检查是否有问题。下面的页面就是有问题&#xff0c;当然如果是误报你也可…

Stage模型应用程序包结构

一、开发态包结构 在DevEco Studio上创建一个项目工程&#xff0c;并尝试创建多个不同类型的Module。根据实际工程中的目录对照本章节进行学习&#xff0c;可以有助于理解开发态的应用程序结构。 工程结构主要包含的文件类型及用途如下&#xff1a; 文件类型说明配置文件 包括…

ISO 26262中的失效率计算:IEC 61709-Clause 17_Switches and push-buttons

概要 IEC 61709是国际电工委员会&#xff08;IEC&#xff09;制定的一个标准&#xff0c;即“电子元器件 可靠性 失效率的基准条件和失效率转换的应力模型”。主要涉及电学元器件的可靠性&#xff0c;包括失效率的基准条件和失效率转换的应力模型。本文介绍IEC 61709第十七章&…

docker部署postgresSQL 并做持久化

先安装docker&#xff0c;安装docker 方法自行寻找方法 然后安装pgsql 拉取镜像 docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/postgres:latest运行容器 docker run -it --name postgres --privileged --restart always -e POSTGRES_PASSWORDYo5WYypu0mCCh…

Ansys Rocky在电池制造行业应用

Ansys Rocky在电池制造行业应用 对于电池电极制造的理解 干湿混合应用 砑光应用 微尺度电极干燥应用 更多应用 材料生产 电极和电池生产

2024前端面试题-css篇

1.p和div区别 p自带有一定margin-top和margin-bottom属性值&#xff0c;而div两个属性值为0&#xff0c;也便是两个p之间有不一定间距&#xff0c;而div没有。 2.对css盒模型的理解 标准盒模型&#xff1a;content不包括padding、border、margin ie盒模型&#xff1a;conten…

2024最新Python+PyCharm保姆级安装教程【附激活码】

PyCharm 是由捷克的 JetBrains 公司开发的一款强大的 Python 集成开发环境&#xff08;IDE&#xff09;&#xff0c;它为 Python 开发者提供了一个全面的编程工具集&#xff0c;支持从代码编写到代码测试、调试和优化等各个环节 &#xff0c;它支持代码自动完成、代码检查、实时…

OpenDDS的Rtps_Udp传输协议可靠性QoS收发基本流程

OpenDDS中,实现了Rtps_Udp传输协议(非纯udp)的可靠性传输。传输的线程包括: 1)发送方线程主要线程和定时器 《1》应用线程 《2》网络异步发送线程 《3》Heartbeat定时器 《4》Nak_response定时器 2)接收方主要线程和定时器 《1》网络异步接收线程 《2》heartbeat_respons…

下载官方llama

1.官网.pth格式 去官网&#xff08;Download Llama (meta.com)&#xff09;申请 具体可以看这个B站视频 Llama2模型申请与本地部署详细教程_哔哩哔哩_bilibili&#xff08;视频是llama2&#xff0c;下载llama3是另外一个git&#xff09; 相关代码如下 git clone https://g…

【C++例题 / 训练】二分算法(模板 例题)

引言 二分也就是二分查找&#xff0c;又叫折半查找。这种算法正如其名&#xff0c;每一次都要分一半。 二分算法可以分为二分查找和二分答案。 以在一个升序数组中查找一个数为例&#xff0c;每次考察数组当前部分的中间元素&#xff0c;如果中间元素刚好是要找的&#xff0…

Java MessagePack序列化工具(适配Unity)

Java MessagePack序列化工具&#xff08;适配Unity&#xff09; 前言项目代码编写 结 前言 前后端统一用MessagePack&#xff0c;结果序列化的结果不一样&#xff0c;发现C#侧需要给每个类增加描述字段数量的Head&#xff0c;而Java却不用&#xff0c;所以在Java侧封装一下序列…

运行微信小程序报错:Bad attr data-event-opts with message

问题 使用uniapp 编译&#xff0c;运行微信小程序环境时&#xff0c;报错 Bad attr data-event-opts with message。&#xff08;这个错误报错原因很多&#xff0c;这里只解决一个&#xff09; 原因 原因是&#xff1a;代码中有&#xff1a; :key"swiperList i"…

近年国际重大网络安全事件深度剖析:安全之路任重道远

引言 在当今数字化时代&#xff0c;网络安全已成为全球关注的焦点。随着信息技术的飞速发展&#xff0c;网络攻击的手段和规模也在不断升级&#xff0c;给个人、企业和国家带来了巨大的威胁。本文将盘点近年来国际上发生的重大网络安全事件&#xff0c;分析其影响和教训&#…

虚幻引擎游戏开发 | 程序化生成道具位置 Randomize Height

当地图上有无数个收集物【如水晶】&#xff0c;一键随机化高度 应用前 应用后 这时候水晶的高度是离散型地在0和110两个数中平均概率地选择。 如果要有权重地分布高度&#xff0c;减少高位水晶的比例&#xff08;由于过多连续跳跃会让玩家无聊和难以持续专注&#xff09;可以加…

什么是制造业项目管理软件?适合制造企业的项目管理软件具备哪些特征

当前&#xff0c;我国的制造业呈现出稳步增长与风险并存的现象。经济构建以国内大循环为主体&#xff0c;国产替代的浪潮正在席卷国内制造业&#xff0c;越来越多的制造领域企业开始启动数字化变革来支撑企业的迅猛发展&#xff0c;进一步优化项目管理流程&#xff0c;促进研发…