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

ui图标素材网站佛山企业快速建站

ui图标素材网站,佛山企业快速建站,安徽省人事考试网,网站开发开题报告怎么写1.N叉树的层序遍历 我们之前遇到过二叉树的层序遍历,只需要用队列先进先出的特性就可以达到层序遍历的目的。 而这里不是二叉树,也就是说让节点的孩子入队列时不仅仅是左右孩子了,而是它的所有孩子。而我们看这棵多叉树的构造,它…

1.N叉树的层序遍历

我们之前遇到过二叉树的层序遍历,只需要用队列先进先出的特性就可以达到层序遍历的目的。

而这里不是二叉树,也就是说让节点的孩子入队列时不仅仅是左右孩子了,而是它的所有孩子。而我们看这棵多叉树的构造,它的孩子是存储在数组中的。所以我们在让孩子入队时只需要依次让数组中的所有节点入队列即可。

class Node 
{
public:int val;vector<Node*> children;
};

而这道题的要求是返回一个二维数组,数组的元素就是每一层的层序遍历结果。

我们关键点就在于如果确定元素属于那一层,方法就是在进行层序遍历前,我们先统计该队列的大小,大小即使这一层元素的个数,当这个数变为0,表示这一层的元素已经统计完了,这时队列中的就是下一层的元素了。此时重复求大小和层序遍历的过程即可。

class Solution 
{
public:vector<vector<int>> levelOrder(Node* root) {if(root == nullptr) return {};queue<Node*> q;q.push(root);vector<vector<int>> ret;int currentFloorSize = 0;while(!q.empty()){vector<int> currentFloor;currentFloorSize = q.size();while(currentFloorSize--){Node* head = q.front(); //获取队头元素for(int i=0; i<head->children.size(); ++i) //让队头孩子入队{q.emplace(head->children[i]);}currentFloor.emplace_back(head->val);//保存队头valq.pop();//出队}ret.emplace_back(currentFloor);}return ret;}
};

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

依旧是二叉树的层序遍历,只不过在遍历的时候有顺序之分,奇数层从左到右,偶数层从右到左。

解法依旧是先采取正常的层序遍历,多定义一个flag变量用了记录当前是奇数还是偶数。当把这一行统计完毕后,在将该结果插入到数组之前,先对flag进行判断,如果是偶数就插入反转之后的数组,如果奇数则直接插入即可。

class Solution 
{
public:vector<vector<int>> zigzagLevelOrder(TreeNode* root) {if(root == nullptr) return {};// 根节点入队列queue<TreeNode*> q;q.emplace(root);vector<vector<int>> ret;int currentFloorSize =0;int flag = 1; // 遍历层的方向,奇数层left->right, 偶数层right->leftwhile(!q.empty()){currentFloorSize = q.size();vector<int> currentFloorEele;while(currentFloorSize--){   // 保存节点数据TreeNode* head = q.front();q.pop();currentFloorEele.emplace_back(head->val);// 孩子入队列if(head->left) q.emplace(head->left);if(head->right) q.emplace(head->right);}if(flag % 2 == 0)reverse(currentFloorEele.begin(), currentFloorEele.end());ret.emplace_back(currentFloorEele);flag++;}return ret;}
};

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

题目要求返回一个数组,数组的元素都是二叉树每一层的最大值。

解法:我们只需要在进行层序遍历的过程中,进行最大值的统计即可。当遍历完该层后,直接保存最大值即可。

class Solution 
{
public:
vector<int> largestValues(TreeNode* root) {if(root == nullptr) return {};queue<TreeNode*> q;q.emplace(root);vector<int> ret;int currentFloorSize = 0;while(!q.empty()){currentFloorSize = q.size();int maxVal = INT_MIN;while(currentFloorSize--){auto head = q.front();q.pop();maxVal = max(maxVal, head->val);if(head->left) q.emplace(head->left);if(head->right) q.emplace(head->right);}ret.emplace_back(maxVal);}return ret;}
};

 4.二叉树最大深度

返回所有层中最宽的。其中,我们只需要看每一层的最左和最右即可,其中也要计算中间的空节点。

解法:我们将二叉树以顺序方式进行存储,存储对用的根节点以及对应的下标。其实就是堆的存储方式。当我们根节点从0开始,他的左右孩子可以通过2*x+1,2*x+2得来。这样下来,每一层的宽度其实就是最左与最右节点的下标的差值+1.

class Solution 
{
public:int widthOfBinaryTree(TreeNode* root) {vector<pair<TreeNode*, unsigned int>> LevelSize; // 模拟队列,将二叉树以顺序结构存储unsigned int ret = 0; // 统计结果LevelSize.emplace_back(root, 0);while(!LevelSize.empty()){// 取出该层的首尾节点,并更新结果auto& [x1, y1] = LevelSize[0];auto& [x2, y2] = LevelSize.back();ret = max(ret, y2 - y1 + 1);// 让孩子入队vector<pair<TreeNode*, unsigned int>> tmp; // 临时存储下一层的节点,最后覆盖原队列for(auto& [x, y] : LevelSize){if(x->left) tmp.emplace_back(x->left, y * 2 + 1);if(x->right) tmp.emplace_back(x->right, y * 2 + 2);}// 更新层LevelSize = tmp;}return ret;}
};

说明:我们这里使用数组来模拟的队列,因为我们让孩子入队列后得头删上一层的元素,在数组中头删消耗比较大,所以我们可以用一个临时数组来统计下一层的元素,之后用临时数组覆盖原数组即可。


文章转载自:

http://jQNZ9iaf.jgzmr.cn
http://bvnfmz0P.jgzmr.cn
http://IIhEGFut.jgzmr.cn
http://mnxoL14u.jgzmr.cn
http://mEzwHBCV.jgzmr.cn
http://NC1moh9Q.jgzmr.cn
http://Sw51ATzl.jgzmr.cn
http://oacfEoAF.jgzmr.cn
http://tTukXbi3.jgzmr.cn
http://ZgepmpEo.jgzmr.cn
http://MrhGGwtM.jgzmr.cn
http://rL50ZkTE.jgzmr.cn
http://BUBLKuPm.jgzmr.cn
http://oZujjXSl.jgzmr.cn
http://ajwSvAM7.jgzmr.cn
http://Fy2PWiIn.jgzmr.cn
http://uCnxetNo.jgzmr.cn
http://w34KTRZ2.jgzmr.cn
http://pcWtm3eW.jgzmr.cn
http://jn39VdQd.jgzmr.cn
http://r7m1zGh3.jgzmr.cn
http://zYxjlFUL.jgzmr.cn
http://xV17ObCc.jgzmr.cn
http://xwgED1Fm.jgzmr.cn
http://pzQ37AVX.jgzmr.cn
http://nRDtlyq6.jgzmr.cn
http://nTIE5V0x.jgzmr.cn
http://HpSsmmp0.jgzmr.cn
http://2C7LZOFS.jgzmr.cn
http://HNqFxtyA.jgzmr.cn
http://www.dtcms.com/wzjs/778142.html

相关文章:

  • 北京网站建设手机app电子商务关键词排名工具
  • 机械毕业设计代做网站贵州省城乡和住房建设厅官方网站
  • 加油站建设专业网站网站跳转怎么办
  • 谁有人和兽做的网站?京东物流网站建设策划书
  • 四川手机网站有哪些广元北京网站建设
  • 学校资源网站 建设方案seo优化文章网站
  • 给几个网站谢谢网站长图怎么做
  • 南京移动网站设计网页制作入门视频教程
  • 陈村建网站手机上做整蛊网站
  • 建设银行投诉处理网站用手机如何制作网页链接
  • 广州网站建设网站推广做景观设施的网站
  • 集团响应式网站建设要做好网络营销首先要
  • 网件路由器重置织梦系统seo网站模板
  • 江苏网站建设效果好珠海建网站
  • 酉阳网站制作天津市招标投标信息网
  • 网站建设备案需要材料网站后台发表文章
  • 网站如何做触屏滑动苏州平面设计公司前十名
  • 浙江英文网站建设中信建设有限责任公司属于央企吗
  • 用dw做的十二星座网站免费邢台网站建设公司排名
  • 广告网站建设与制作公司如何自己制作小程序
  • 发布企业信息的网站2015做微网站多少钱
  • 开发cms网站系统淮安建筑信息平台
  • 为什么公司的网站打不开在淘宝介绍里边怎么做网站链接
  • 腾讯云10g数字盘做网站够么广元如何做百度的网站
  • asp网站用ftp怎么替换图片软件著作权申请费用
  • 电子商务网站建设的流程图南京网站建设哪里好
  • 包装技术支持 东莞网站建设哪些网站可以做邀请函
  • 现在的网站做多大尺寸的wordpress文章图片
  • 图书馆网站参考咨询建设网站开发方法有哪些
  • 长沙网站设计服务不会代码可以做网站维护吗