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

优选算法——队列+BFS

目录

1. N叉树的层序遍历

2.  二叉树的锯齿层序遍历

3. 二叉树最大宽度

4. 在每个树行中找最大值


1. N叉树的层序遍历

题目链接429. N 叉树的层序遍历 - 力扣(LeetCode)

题目展示

题目分析

层序遍历即可~仅需多加⼀个变量,用来记录每⼀层结点的个数就好了。

代码实现:

/*
// Definition for a Node.
class Node {
public:int val;vector<Node*> children;Node() {}Node(int _val) {val = _val;}Node(int _val, vector<Node*> _children) {val = _val;children = _children;}
};
*/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;}
};

2.  二叉树的锯齿层序遍历

题目链接103. 二叉树的锯齿形层序遍历 - 力扣(LeetCode)

题目展示:

题目分析:

在正常的层序遍历过程中,我们是可以把⼀层的结点放在⼀个数组中去的。 既然我们有这个数组,在合适的层数逆序就可以得到锯齿形层序遍历的结果。

代码实现:

/*** 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>> 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;}
};

3. 二叉树最大宽度

题目链接662. 二叉树最大宽度 - 力扣(LeetCode)

题目展示:

题目分析:

代码实现: 

/*** 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: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;}
};

4. 在每个树行中找最大值

题目链接:515. 在每个树行中找最大值 - 力扣(LeetCode)

题目展示:

题目分析:

代码实现:

/*** 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<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.xdnf.cn/news/374995.html

相关文章:

  • Spark的三种部署模式及其特点与区别
  • GitHub 趋势日报 (2025年05月09日)
  • HTTP:十三.HTTP日志
  • 如何解决 PowerShell 显示 “此系统上禁用了脚本运行” 的问题
  • DAMA语境关系图汇总及考前须知
  • 【Linux系统编程】进程属性--进程状态
  • Vision Transformer(ViT)
  • 事务连接池
  • 编写第一个MCP Server之Hello world
  • 【动态导通电阻】软硬开关下GaN器件的动态RDSON
  • 养生:拥抱健康生活的秘诀
  • 深入解析JavaScript变量作用域:var、let、const全攻略
  • React Hooks:从“这什么鬼“到“真香“的奇幻之旅
  • 《基于人工智能的智能客服系统:技术与实践》
  • 二分类问题sigmoid+二元交叉熵损失
  • 微服务的“迷宫” - 我们为何需要服务网格?
  • 数据库故障排查指南:从连接问题和性能优化
  • Docker使用小结
  • 为什么选择 FastAPI、React 和 MongoDB?
  • vue 组件函数式调用实战:以身份验证弹窗为例
  • 计算机大类专业数据结构下半期实验练习题
  • 【基础IO下】磁盘/软硬链接/动静态库
  • 精品,第21章 Python数据类型详解:字典的入门与进阶总结(DevOps SRE视角)
  • sensitive-word-admin v2.0.0 全新 ui 版本发布!vue+前后端分离
  • T2I-R1:通过语义级与图像 token 级协同链式思维强化图像生成
  • 为什么有了BST了,还要红黑树,红黑树有什么优点
  • OCP开闭原则
  • Xilinx Kintex-7 XC7K325T-2FFG676I 赛灵思 FPGA
  • Kubernetes生产实战(十六):集群安全加固全攻略
  • Visual Studio 2022 远程调试