news 2026/4/22 23:39:55

二叉树的层序遍历(c++)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
二叉树的层序遍历(c++)

102. 二叉树的层序遍历 - 力扣(LeetCode)

解题思路:

例如:

1.因为题目返回值是一个二维的vector,即我们知道了要有一个vector<vector<int>> vv 用来存放我们的答案;

2.说到层序,就会想到创建一个队列queue<TreeNode*> que 依层序依次存放各个节点,根据先进先出的特性,依次取队列头获取节点实现层序遍历;

3.但是本题的矛盾点是,如何将这些节点数据都能存放到自己的层级上。因为正常的遍历都是一个一个的取队头,不知道取到第几个这一层才算取完了

那么我们可以想到可以记录一下这一层有几个嘛,但是如何记录呢?

我们可以想一下我们的队列是如何存放数据的

(1)需要通过while(!que.empty()) 循环来取出节点,那么我们得先将头节点root手动push进que:

(2)那么按照要求,这个7是不是就是第一层的全部数据?而且此时我们的que.size()是不是就是当前顶层的节点个数?(之后的层级是不是也会有这样的规律?)那么我们先将这层数据存入我们的vector<vector<int>> vv ? 那么还需要创建一个vector<int> v 来存放单层的数据;再将v存入vv中。

将que.front()取出来

TreeNode* front = que.front();

que.pop(); v.push_back(front->val);

(3)在拿到front的同时,我们要将其下的子节点都入队列

if (front->left) { que.push(front->left); } if (front->right) { que.push(front->right); }

那么此时我们再观察

此时que.size()是不是就是第二层的节点个数?那么我们可以通过一个while(que.size())循环来控制每批从队列里取多少节点:

while (队列非空) {

初始化层级v;

while(level_size量--) {

取队头;队列pop();入数据val 进v.push_back();

将此节点的子节点入队que.push(子节点);

}

这一批(即这一层)的val都进v了,那么就要将vv.push_back(v)了;

此时还要更新level_size = que.size();

}

最后总结:

本题的要点是知道每一层要取几个节点,通过每取完一层后,记录此时留在队列中的元素个数,即为下一层要取的节点个数

完整代码:

vector<vector<int>> levelOrder(TreeNode* root) { vector<vector<int>> vv; queue<TreeNode*> que; int level_size = 0; if (root) { que.push(root); level_size = 1; } while (!que.empty()) { vector<int> v; while (level_size--) { TreeNode* front = que.front(); que.pop(); v.push_back(front->val); if (front->left) { que.push(front->left); } if (front->right) { que.push(front->right); } } vv.push_back(v); level_size = que.size(); } return vv; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/22 23:38:42

最大的团队表现值(python)

思路&#xff1a;使用贪心思想最小堆。先以效率为基准降序排序&#xff0c;那么当前遍历到的效率就是可见的最小效率&#xff0c;用这个最小效率与小顶堆的速度之和相乘&#xff0c;再取max(当前最大价值&#xff0c;全局最大价值)。# 6 # 2 10 3 1 5 8 # 5 4 3 9 7 2 # 2 # 输…

作者头像 李华
网站建设 2026/4/22 23:37:27

Python与OpenAI API实战:快速构建AI对话服务

1. Python与OpenAI API入门&#xff1a;从零构建你的第一个AI对话项目作为一名长期从事AI应用开发的工程师&#xff0c;我经常被问到如何快速上手OpenAI的API服务。今天我就带大家完整走一遍流程&#xff0c;从API密钥获取到最终部署一个可交互的对话服务。这个项目特别适合想要…

作者头像 李华
网站建设 2026/4/22 23:36:23

Linux 用户 / 用户组 核心命令全详解

第一部分&#xff1a;用户组管理命令&#xff08;2 个&#xff09;1. groupadd - 创建新用户组作用&#xff1a;新建一个用户组&#xff08;用于批量管理用户权限&#xff09;标准语法groupadd [选项] 组名核心必记选项选项作用-g GID手动指定组 ID&#xff08;不写则系统自动分…

作者头像 李华
网站建设 2026/4/22 23:36:11

2025最权威的十大AI论文方案推荐榜单

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 要是针对维普检测系统的 AI 降重需求&#xff0c;那就得从文本特征调整这方面着手。首先呢&a…

作者头像 李华
网站建设 2026/4/22 23:32:00

c#如何使用Record类型_c#Record类型从入门到精通教程

Record 是带语义的不可变数据容器&#xff0c;启用值相等、init-only 属性、非空保障及自动生成 ToString/Equals/GetHashCode&#xff1b;误当普通 class 用易踩坑。Record 类型不是语法糖&#xff0c;是带语义的不可变数据容器Record 类型在 C# 9 中不是“更简洁的 class 写法…

作者头像 李华