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

【宽搜】1. 层序遍历模板讲解

题目描述

题目链接:N叉树的层序遍历
在这里插入图片描述

层序遍历流程

请仔细阅读下图:
在这里插入图片描述
根据上图的流程,下面再明确几个问题:
1. 为什么要使用队列?

队列是先进先出的数据结构,在数的层序遍历中,需要先将节点push进来,最终将节点先pop出去,这符合队列的特性

2. 如何控制将每一层的元素push进队列并最终加入到vector中?

将A节点pop出队列的时候就将A的孩子push进队列。这样当A节点这一层都pop出队列的时候A节点的下一层就全部进入到队列中了。队列的size就是这一层的节点个数。当遍历完size时,就说明这一层都遍历完了,此时就可以将已经装好这一层元素的vector push_back()进vector<vector< int >>中了。

代码

class Solution {
public:vector<vector<int>> levelOrder(Node* root) {vector<vector<int>> res;queue<Node*> q;if (root == nullptr){return res;}q.push(root);while(q.size()){//这两个值在这里定义是因为每一层都需要重新定义,会变化vector<int> tmp;int sz = q.size();   //记录q的size,其实就是数的每一层的节点个数//这里是对数的每一层进行操作了for (int i = 0; i < sz; ++ i){Node* t = q.front();//将t从队列中pop出去q.pop();//同时将这一层的元素一个一个都push_back()进vector中tmp.push_back(t->val);//t的孩子都push进队列中 --> 因为push和pop都会影响到队列的size//如果前面不将当时的size保存到sz中,会出现混乱的问题for (Node* child : t->children){   if (child != nullptr)q.push(child);}}//走到这里,说明数的一层遍历完了//将这一层的节点的值push_back()到vector<cevtor<int>>中res.push_back(tmp);}return res;}
};

这个代码就是层序遍历的模板,层序遍历就用这个模板就行了。然后根据不同的题目进行简单的改变。
在这里插入图片描述


http://www.mrgr.cn/news/42404.html

相关文章:

  • 20240930编译orangepi5的Android12使用HDMI0输出
  • 小红书三面被问 RAG 原理,秒挂…
  • 记录使用crypto-js、jsencrypt实现js加密的方法
  • Authentication Lab | JWT None Algorithm
  • 15种高级RAG技术:从预检索到生成全面提升RAG效果
  • Java后端分布式系统的服务监控:Zabbix与Nagios
  • 图片尺寸缩放批量剪辑:高效方法与技巧分享
  • 《业务三板斧:定目标、抓过程、拿结果》读书笔记1
  • WooCommerce与wordpress是什么关系
  • 【Linux系统编程】第二十七弹---文件描述符与重定向:fd奥秘、dup2应用与Shell重定向实战
  • 【微服务】注册中心 - Eureka(day3)
  • Timer 计时器
  • 《蓝桥杯算法入门》(C/C++、Java、Python三个版本)24年10月出版
  • 华为OD机试 - 无向图染色(Python/JS/C/C++ 2024 E卷 100分)
  • 两个wordpress网站共用一个数据库的数据表
  • 如何对物理系统进行数学建模?
  • CSS属性 - animation
  • 14 Shell Script正则表达式
  • Navicat Premium 12 for Mac中文永久版
  • 鸿蒙HarmonyOS开发生态:构建万物互联的未来