刷题训练之队列与宽搜

server/2024/10/18 23:26:04/

> 作者:დ旧言~
> 座右铭:松树千年终是朽,槿花一日自为荣。

> 目标:熟练掌握字符串算法

> 毒鸡汤:学习,学习,再学习 ! 学,然后知不足。

> 专栏选自:刷题训练营

> 望小伙伴们点赞👍收藏✨加关注哟💕💕 

🌟前言分析

最早博主续写了牛客网130道题,这块的刷题是让同学们快速进入C语言,而我们学习c++已经有一段时间了,知识储备已经足够了但缺少了实战,面对这块短板博主续写刷题训练,针对性学习,把相似的题目归类,系统的刷题,而我们刷题的官网可以参考:​​​​​​

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

牛客网 - 找工作神器|笔试题库|面试经验|实习招聘内推,求职就业一站解决_牛客网

⭐知识讲解

基本思想: 

  • 采用BFS算法
  • 采用模拟细想

🌙topic-->1

题目链接:1. - 力扣(LeetCode)

 

题目分析:

给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)

算法原理:

  • 解法:BFS

图解:

代码演示:

class Solution {
public:vector<vector<int>> levelOrder(Node* root) {vector<vector<int>> ret; // 记录最终结果queue<Node*> q;          // 层序遍历需要的队列if (root == nullptr)return ret;q.push(root);while (q.size()) {int sz = q.size(); // 先求出本层元素的个数vector<int> tmp;   // 统计本层的节点for (int i = 0; i < sz; i++) {Node* t = q.front();q.pop();tmp.push_back(t->val);for (Node* child : t->children) // 让下⼀层结点⼊队{if (child != nullptr)q.push(child);}}ret.push_back(tmp);}return ret;}
};

🌙topic-->2

题目链接:2. - 力扣(LeetCode)

 

题目分析:

给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。

算法原理:

  • 解法:层序遍历

图解:

代码演示:

class Solution {
public:vector<vector<int>> zigzagLevelOrder(TreeNode* root) {vector<vector<int>> ret;if (root == nullptr)return ret;queue<TreeNode*> q;q.push(root);int level = 1;while (q.size()) {int sz = q.size();vector<int> tmp;for (int i = 0; i < sz; i++) {auto t = q.front();q.pop();tmp.push_back(t->val);if (t->left)q.push(t->left);if (t->right)q.push(t->right);}// 判断是否逆序if (level % 2 == 0)reverse(tmp.begin(), tmp.end());ret.push_back(tmp);level++;}return ret;}
};

🌙topic-->3

题目链接:3. - 力扣(LeetCode)

 

题目分析:

给你一棵二叉树的根节点 root ,返回树的 最大宽度 。(树的 最大宽度 是所有层中最大的 宽度 )

算法原理:

  • 解法:利用数组存储二叉树的方式,给结点编号

图解:

代码演示:

class Solution {
public:int widthOfBinaryTree(TreeNode* root) {vector<pair<TreeNode*, unsigned int>> q; // ⽤数组模拟队列q.push_back({root, 1});unsigned int ret = 0;while (q.size()) {// 先更新这⼀层的宽度auto& [x1, y1] = q[0];auto& [x2, y2] = q.back();ret = max(ret, y2 - y1 + 1);// 让下⼀层进队vector<pair<TreeNode*, unsigned int>> tmp; // 让下⼀层进⼊这个队列for (auto& [x, y] : q) {if (x->left)tmp.push_back({x->left, y * 2});if (x->right)tmp.push_back({x->right, y * 2 + 1});}q = tmp;}return ret;}
};

🌙topic-->4

题目链接:4. - 力扣(LeetCode)

 

题目分析:

给定一棵二叉树的根节点 root ,请找出该二叉树中每一层的最大值。

算法原理:

  • 解法:利用层序遍历,统计出每一层的最大值

图解:

这个题目和上面的极其相似,所以就不再讲解了

代码演示:

class Solution {
public:vector<int> largestValues(TreeNode* root) {vector<int> ret;if (root == nullptr)return ret;queue<TreeNode*> q;q.push(root);while (q.size()) {int sz = q.size();int tmp = INT_MIN;for (int i = 0; i < sz; i++) {auto t = q.front();q.pop();tmp = max(tmp, t->val);if (t->left)q.push(t->left);if (t->right)q.push(t->right);}ret.push_back(tmp);}return ret;}
};

🌟结束语

       今天内容就到这里啦,时间过得很快,大家沉下心来好好学习,会有一定的收获的,大家多多坚持,嘻嘻,成功路上注定孤独,因为坚持的人不多。那请大家举起自己的小手给博主一键三连,有你们的支持是我最大的动力💞💞💞,回见。

​​​


http://www.ppmy.cn/server/124446.html

相关文章

Docker部署MongoDB教程

嘿&#xff0c;大家好&#xff01;今天我在三丰云免费服务器上进行了一次激动人心的MongoDB部署测试。这款免费云服务器1核CPU、1G内存、10G硬盘、5M带宽&#xff0c;是不错的免费服务器选择。 首先&#xff0c;让我们简要介绍一下使用到的Docker和MongoDB软件。Docker是一个开…

鸿蒙开发(NEXT/API 12)【硬件(获取智慧出行连接状态)】车载系统

获取智慧出行连接状态&#xff0c;用于应用UI呈现或基于HiCar认证汽车摄像头的业务交互等。 接口说明 接口名描述[getSmartMobilityStatus] (type: SmartMobilityType): SmartMobilityInfo获取智慧出行连接状态。 开发步骤 导入Car Kit模块。 import { smartMobilityCommon …

C++学习9.27

1、顺序表、栈、队列都更改成模板类 &#xff08;1&#xff09;顺序表 #include <iostream> #include <cstring>using namespace std;template <typename T1,typename T2,typename T3> class My_string { private:T1 *ptr; //指向字符数组的指针T2…

Spark 任务与 Spark Streaming 任务的差异详解

Spark 任务与 Spark Streaming 任务的主要差异源自于两者的应用场景不同&#xff1a;Spark 主要处理静态的大数据集&#xff0c;而 Spark Streaming 处理的是实时流数据。这些差异体现在任务的调度、执行、容错、数据处理模式等方面。 接下来&#xff0c;我们将从底层原理和源…

组播基础-2-IGMP协议

文章目录 IGMPIGMPv1IGMPv2IGMPv3IGMP总结IGMP Snooping IGMP 运行于主机和路由器之间 因特网组管理协议&#xff0c;TCP/IP 协议族中负责 IP 组播成员管理的协议&#xff0c;用来在接收者与其他直接相邻的组播路由器之间建立、维护组播组成员关系 负责组播成员管理&#xf…

探索Python网络世界的利器:Requests-HTML库

文章目录 探索Python网络世界的利器&#xff1a;Requests-HTML库背景&#xff1a;为何选择Requests-HTML&#xff1f;什么是Requests-HTML&#xff1f;如何安装Requests-HTML&#xff1f;5个简单库函数的使用方法3个场景下库的使用示例常见Bug及解决方案总结 探索Python网络世界…

Istio

Istio 是一个开源的服务网格平台&#xff0c;它为微服务架构提供了一套完整的解决方案。Istio 能够管理服务间的交互&#xff0c;提供流量管理、安全性和可观测性等功能&#xff0c;而无需修改应用程序本身的代码。它旨在简化现代分布式系统中服务间通信的复杂性&#xff0c;并…

【UE5】将2D切片图渲染为体积纹理,最终实现使用RT实时绘制体积纹理【第三篇-着色器光照】

在前两篇文章中&#xff0c;我们分别拆解描述了实现原理&#xff0c;并进行了基础的着色器制作。在这一篇文章中&#xff0c;我们将为它实现光照效果 简单的概述 当光线射入体积时&#xff0c;随着光线射入距离的增加&#xff0c;体积中的介质会对光线产生反射和吸收作用&…