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

帮助设计的网站鲜花网站建设规划书

帮助设计的网站,鲜花网站建设规划书,沙河高端网站建设,玉树电子商务网站建设公司简介 几乎没有单纯之考察队列的&#xff0c;队列一般只作为一个辅助工具 队列常服务于BFS queue接口 1.N叉树的层序遍历 link: 思路&#xff1a; 队列 层序遍历即可 code /* // Definition for a Node. class Node { public:int val;vector<Node*> children;Node()…

简介

几乎没有单纯之考察队列的,队列一般只作为一个辅助工具

队列常服务于BFS

queue接口

1.N叉树的层序遍历

link:

思路:

        队列 层序遍历即可

code

/*
// 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) {if(!root) return {};vector<vector<int>> ans;queue<Node*> que;que.push(root);while(!que.empty()){int sz = que.size();vector<int> tmp;while(sz--){Node* pop = que.front();tmp.push_back(pop->val);que.pop();for(auto& e:pop->children){que.push(e);}}ans.push_back(tmp);}return ans;}
};

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

link:103. 二叉树的锯齿形层序遍历 - 力扣(LeetCode)

思路

        在层序遍历基础上根据deep翻转即可

code

/*** 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) {// 在层序遍历基础上来个标记为即可if(!root) return {};int deep = 0;// deep % 2 == 0 时需要逆序vector<vector<int>> ans;queue<TreeNode*> que;que.push(root);while(!que.empty()){deep++;vector<int> tmp = {};int sz = que.size();for(int i = 0; i < sz; i++){TreeNode* pop = que.front();que.pop();tmp.push_back(pop->val);if(pop->left)que.push(pop->left);if(pop->right)que.push(pop->right);}if(deep % 2 == 0)//逆序{reverse(tmp.begin(), tmp.end());}ans.push_back(tmp);}return ans;}
};

3.二叉树的最大宽度

link:662. 二叉树最大宽度 - 力扣(LeetCode)

思路:

        数组存储树 + 双端队列

        同余定理:

  •         即使最后参与运算的数据很大,会int溢出
  •         但是因为是减操作,只要结果不会溢出int,结果就是正确的

        unsigned 在溢出时不会报错

code1

/*** 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 模拟双端队列// 同余定理:保证即使int溢出, 结果也会正确if(!root) return 0;unsigned ans = 1;vector<pair<TreeNode*, unsigned>> dque = {{root, 1}};// unsigned 防止溢出报错while(!dque.empty()){ans = max(ans, dque.back().second - dque[0].second + 1);int sz = dque.size();for(int i = 0; i < sz; i++){pair<TreeNode*, unsigned> out = dque[0];dque.erase(dque.begin());if(out.first->left) dque.push_back({out.first->left, out.second * 2});if(out.first->right) dque.push_back({out.first->right, out.second * 2 + 1});}}return ans;}
};

code2

两个vector而不是一个队列,在层序遍历时会更方便,简洁,明了

同时使用结构化绑定

/*** 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) {if(!root) return 0;unsigned ans = 1;vector<pair<TreeNode*, unsigned>> vt = {{root, 1}};while(vt.size()){decltype(vt) tmp = {};auto& [x1, y1] = vt[0];auto& [x2, y2] = vt.back();ans = max(ans, y2 - y1 + 1);for(auto& [node, val] : vt){if(node->left) tmp.push_back({node->left, val * 2});if(node->right) tmp.push_back({node->right, val * 2 + 1});}vt.swap(tmp);}return ans;}
};

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

link:515. 在每个树行中找最大值 - 力扣(LeetCode)

思路:

        层序遍历即可

code

两个vector代替que,简洁明了,方便易懂;

/*** 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) {if(!root) return {};vector<int> ans;vector<TreeNode*> vt = {root};while(!vt.empty()){int maxn = vt[0]->val;decltype(vt) tmp = {};for(auto& node : vt){maxn = max(maxn, node->val);if(node->left) tmp.push_back(node->left);if(node->right) tmp.push_back(node->right);}vt.swap(tmp);ans.push_back(maxn);}return ans;}
};

http://www.yayakq.cn/news/299414/

相关文章:

  • 攀枝花住房和城乡建设厅网站网站源码地址怎么看
  • 常德网站设计公司关键少数
  • jsp网站开发技术难点天津门户网站开发
  • 安卓游戏模板下载网站高埗镇仿做网站
  • 西安企业网站建设模板济南做网站的公司哪家好
  • 班级网站 php昆明免费网站制作
  • 做网站的有什么软件有域名怎么建设网站
  • 合肥网站快速排名提升英雄联盟视频网站源码
  • 旅游网站策划书dedecms5.7 财经网站
  • 做网站注意哪些方面厦门企业公司电话黄页
  • 网站建设怎么找客源?做网站可以申请个体户么
  • 大丰做网站费用商务礼品网站模板
  • 阿里建站模板宁波网站排名提升
  • 如何更改网站标签logo公司网站建设情况说明书
  • 手机网站设计费用爱妮微如何做网站链接的网址
  • 用于做网站的软件做软件赚钱吗
  • 品牌网站策划书网站建站网站多少钱
  • 4399网站开发关键词优化的主要工具
  • 制作网站赚钱旺道seo网站优化大师
  • 盐城市建设局网站在网站制作完成后网站建设
  • 网站做招聘需要什么资质注册公司名称查询
  • 网站前端设计与制作IT男为女朋友做的求婚网站
  • 随州做网站公司wordpress主题添加目录
  • 中国建设银行国际互联网网站自己搞个网站需要多少钱
  • 怎么做网站运营编辑的简历crm系统有哪些品牌
  • 营销型平台网站南宁网上房地产
  • 公司网站关键词优化怎么做河南省建筑工程信息网
  • 介休门户网站企信网企业信用信息系统
  • 洛阳网站建设汉狮报价网站索引量突然下降
  • 多个域名 指向同一个网站域名查询注册官网