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

LeetCode 102题解 | 二叉树的层序遍历

二叉树的层序遍历

  • 一、题目链接
  • 二、题目
  • 三、算法原理
  • 四、编写代码

一、题目链接

二叉树的层序遍历

二、题目

在这里插入图片描述

三、算法原理

本题要求把结果放在不规则的二维数组里,即每一层二叉树的数值放在一行数组中。

回顾之前的层序遍历是借助队列实现的,是不考虑把结果放在二维数组里的,但是会分不清楚哪个结点是第几层的。怎么实现一层放在一行数组中呢?

两种思路:

  • 思路1:思路简单,但是代码不好实现。只讲思路,定义两个队列,一个存储二叉树结点,一个存储整型数据。

在这里插入图片描述

  • 思路2:更简单的思路,最后会有代码实现。只定义存储结点的队列。增加一个变量levelSize,表示每一层二叉树的数据个数。

肯定知道第1层的数据个数,即为1。最先把根结点入栈,变量levelSize置为1。核心逻辑就是用levelSize控制一层一层出队,levelSize一旦--,一个结点出栈,同时它的孩子结点入栈。入栈出栈规则与上面的一样:每一个结点出栈,都要把它的孩子结点入栈。

在这里插入图片描述

循环:levelSize--,结点9出队,结点9孩子结点入队,再levelSize--,结点20出队,结点20孩子结点入队,此时levelSize为0,表示当前层的结点都出队了,同时也表示下一层的结点也都入队了,再更新变量levelSize,表示下一层的结点个数。

在这里插入图片描述

k--走k次,--k走k - 1次。

四、编写代码

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> vv;// 只定义存储结点的队列queue<TreeNode*> q;int levelSize = 0;// 根结点入队,levelSize置为1if (root){q.push(root);levelSize = 1;}// 一层一层出while (!q.empty()){vector<int> v;while (levelSize--){TreeNode* front = q.front();q.pop();v.push_back(front->val);// 孩子结点入队if (front->left) q.push(front->left);if (front->right) q.push(front->right);}vv.push_back(v);levelSize = q.size();}return vv;}
};

队列不为空或者levelSize不为0都可以作为条件:

 while (!q.empty()){}

内层循环每走一次就控制一层:

在这里插入图片描述

http://www.dtcms.com/a/170934.html

相关文章:

  • BUUCTF——Fake XML cookbook
  • 13:图像处理—畸变矫正详解
  • 57认知干货:AI机器人产业
  • AIDC智算中心建设:计算力核心技术解析
  • 【深入浅出MySQL】之数据类型介绍
  • ES6入门---第三单元 模块一:类、继承
  • 分享一个Android中文汉字手写输入法并带有形近字联想功能
  • DeepSeek Copilot idea插件推荐
  • Allegro23.1新功能之如何设置高压爬电间距规则操作指导
  • Mamba+Attention+CNN 预测模型:破局长程依赖的计算机视觉新范式
  • ActiveMQ 与其他 MQ 的对比分析:Kafka/RocketMQ 的选型参考(二)
  • 【JLINK调试器】适配【大华HC32F4A0芯片】的完整解决方案
  • 数据结构--树状数组
  • opencv的contours
  • ABC404G 题解
  • 数据结构(4) 堆
  • Terraform 中的 external 数据块是什么?如何使用?
  • 软考-软件设计师中级备考 12、软件工程
  • Java 中使用 Callable 创建线程的方法
  • 【办公类-99-04】20250504闵豆统计表excle转PDF,合并PDF、添加中文字体页眉+边框下划线
  • postgresql数据库基本操作
  • JVM happens-before 原则有哪些?
  • 数字信号处理学习笔记--Chapter 1 离散时间信号与系统
  • AndroidLogger常用命令和搜索功能介绍
  • ESP32S3 多固件烧录方法、合并多个固件为单一固件方法
  • C语言实现数据结构:堆排序和二叉树_链式
  • 小土堆pytorch--tensorboard的使用
  • AI日报 · 2025年5月04日|Hugging Face 启动 MCP 全球创新挑战赛
  • 位置权限关掉还能看到IP属地吗?全面解析定位与IP的关系
  • nextjs+supabase vercel部署失败