首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

LeetCode102.二叉树的层序遍历

编程知识
2024年07月23日 18:52

LeetCode题目链接:https://leetcode.cn/problems/binary-tree-level-order-traversal/submissions/548489149/

题目叙述:

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

这道题就是简单的叫我们求层序遍历的代码,二叉树的层序遍历实际上就是一个广度优先遍历(BFS),我们可以用一个队列来模拟这个过程。

步骤1

1.力扣上面的原题要求我们返回一个二维数组,即每个一维数组存储每一层遍历的结果,我们首先定义一个vector的二维数组result,如果传入的根节点为空,我们直接返回这个空的二维数组即可。

步骤2

2.如果根节点不为空的话,我们定义一个队列queue,并将根节点入队。

步骤3

3.接下来我们就是来模拟层序遍历的过程了,我们在队列里操作这颗二叉树的节点时,当队列为空,二叉树是不是就已经遍历完了?可以自己手动模拟试一试,可以很容易的发现,当队列为空时,我们的二叉树

就遍历完了,因此,我们的外层循环条件为队列不为空

步骤4

4.由于我们的题目要求我们要返回每一层遍历的结果,因此,我们需要一个元素来记录我们当前层次的元素个数,怎么记录呢?————就是当前队列的元素个数,因此,我们可以使用size变量来存储我们当前

层次的元素个数,并用一个数组current来记录当前层次遍历的结果,最后每一次将current放入result即可,接下来就进入循环的过程了,我们遍历每一层的时候操作size次,就可以将当前层次的元素全部

遍历,并且将下一层的元素全部入队。

怎么将队列中的元素放进数组呢?

我们在单层循环内,可以使用node变量,来取出我们队列的头部元素,同时将头部元素出队,并将node->val存入当前数组current中,判断node的左孩子是否为空,若不为空,就将node的左孩子入队,右孩子

也是如此。最后,经过若干次循环,当队列中的元素为空时,我们的遍历也就完成了

最后,这道题完整的代码如下:

class Solution {
public:
	vector<vector<int>> levelOrder(TreeNode* root) {
		//定义二维数组,作为返回结果
		vector<vector<int>> result;
		//根节点为空,就直接返回空数组
		if (root == NULL) return result;
		//定义模拟队列
		queue<TreeNode*> que;
		//根节点入队
		que.push(root);
		while (!que.empty()) {
			//记录每一层的操作次数
			int size = que.size();
			//使用current数组来存储每一层遍历的结果
			vector<int> current;
			//每一层循环size次就可以了
			while(size--) {
				//取队头元素
				TreeNode* node = que.front();
				//队头元素出队
				que.pop();
				//将每一层遍历的元素放入current数组中
				current.push_back(node->val);
				//看左孩子是否为空,不为空就将左孩子入队
				if (node->left != nullptr) que.push(node->left);
				if (node->right != nullptr) que.push(node->right);
			}
			//将current数组放入二维数组当中
			result.push_back(current);
		}
		//最后,返回这个二维数组就可以了!
		return result;
	}
};

From:https://www.cnblogs.com/Tomorrowland/p/18318744
本文地址: http://www.shuzixingkong.net/article/340
0评论
提交 加载更多评论
其他文章 VUE系列---深度解析 Vue 优化策略
在前端开发中,性能优化一直是一个重要的课题。Vue.js 提供了多种优化策略,帮助开发者构建高性能的应用。本文将深入解析以下几个优化策略: 使用 v-once、v-if 和 v-show 的区别和优化 通过异步组件提升性能 一、v-once、v-if 和 v-show 的区别和优化 1. v-onc
SpringBoot实战:Spring Boot接入Security权限认证服务
引言 Spring Security&#160;是一个功能强大且高度可定制的身份验证和访问控制的框架,提供了完善的认证机制和方法级的授权功能,是一个非常优秀的权限管理框架。其核心是一组过滤器链,不同的功能经由不同的过滤器。本文将通过一个案例将&#160;Spring Security&#160;整合
SpringBoot实战:Spring Boot接入Security权限认证服务
制作KubeVirt镜像
目录制作KubeVirt镜像1. 准备磁盘文件2. 编写Dockerfile3. 构建镜像4. 上传镜像到仓库(可选)5. 导出镜像6. 虚拟机yaml文件7. 启动虚拟机8. 启动虚拟机报错 制作KubeVirt镜像 我们现在已经安装好了Kubevirt并且也运行了第一个虚拟机,但是这个虚拟机并不
【实时最新】开源新纪元:Llama 3.1超大杯405B跑分惊艳,首次超越GPT-4o,下载链接曝光!
开源巨擘Llama 3.1崭露头角,性能卓越引发热议 在科技界的瞩目下,Llama 3.1系列模型以其卓越的性能脱颖而出,尤其是其405B超大杯版本,在微软Azure-ML GitHub平台的多项评测中展现出非凡实力,不仅超越了GPT-4o,就连70B版本也能与GPT-4o分庭抗礼。值得注意的是,这
【实时最新】开源新纪元:Llama 3.1超大杯405B跑分惊艳,首次超越GPT-4o,下载链接曝光! 【实时最新】开源新纪元:Llama 3.1超大杯405B跑分惊艳,首次超越GPT-4o,下载链接曝光! 【实时最新】开源新纪元:Llama 3.1超大杯405B跑分惊艳,首次超越GPT-4o,下载链接曝光!
[rCore学习笔记 017]实现批处理操作系统
写在前面 本随笔是非常菜的菜鸡写的。如有问题请及时提出。 可以联系:1160712160@qq.com GitHhub:https://github.com/WindDevil (目前啥也没有 本章目的 实现批处理操作系统,每当一个应用程序执行完毕,都需要将下一个要执行的应用的代码和数据加载到内存.
「图论」Bron-kerbosch算法
7.21晚上加赛 T2.七负我,做这题找到了性质发现需要求最大团,不会,爆搜,打假了,赛后改,对了,但时间复杂度大爆炸,看下发题解,有这么一句话:于是学习了一下。 Bron-kerbosch算法-求图的最大团,极大团 概念: 团:每个顶点都两两相连(又叫完全子图) 极大团:没有被包含在其他团中的团
「图论」Bron-kerbosch算法
架构演化思考总结(1)
架构是什么? 答:架构是对依赖的统一管理。 什么是依赖?分为几种?我们为什么要对它进行管理。 依赖就是持有对象,或者说是持有一个非空的引用。 单向依赖 正如项目开发中,对象和对象之间都会有相互持有、相互调用的需求的。而对象间的持有就是一种依赖。A想要完成一个逻辑处理,需要调用B的一个方法来实现,那么
架构演化思考总结(1) 架构演化思考总结(1) 架构演化思考总结(1)
解锁Nginx日志的宝藏:GoAccess——你的实时、交互式Web日志分析神器!
在当今数字化的时代,网站的流量和用户行为数据就像是一座蕴藏着无尽秘密的宝藏。而如何有效地挖掘和分析这些数据,成为了许多网站管理者和开发者头疼的问题。GoAccess,一款开源的实时Web日志分析工具,或许能为我们提供一扇窥探这些秘密的窗口。
解锁Nginx日志的宝藏:GoAccess——你的实时、交互式Web日志分析神器! 解锁Nginx日志的宝藏:GoAccess——你的实时、交互式Web日志分析神器! 解锁Nginx日志的宝藏:GoAccess——你的实时、交互式Web日志分析神器!