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

建设工程行业招工信息网站/英文站友情链接去哪里查

建设工程行业招工信息网站,英文站友情链接去哪里查,wordpress采集翻译,北京网站建站公一、二叉树的层序遍历 . - 力扣&#xff08;LeetCode&#xff09; 该题的层序遍历和以往不同的是需要一层一层去遍历&#xff0c;每一次while循环都要知道在队列中节点的个数&#xff0c;然后用一个for循环将该层节点走完了再走下一层 class Solution { public:vector<vec…

一、二叉树的层序遍历

. - 力扣(LeetCode)

       该题的层序遍历和以往不同的是需要一层一层去遍历,每一次while循环都要知道在队列中节点的个数,然后用一个for循环将该层节点走完了再走下一层

class Solution {
public:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> ret;queue<TreeNode*> q;if(root==nullptr) return ret;q.push(root);while(!q.empty()){int sz=q.size();//帮助我们控制一层一层出  因为上一层出完,下一层已经进去了vector<int> path;//统计结果for(int i=0;i<sz;++i){TreeNode*t=q.front();q.pop();path.push_back(t->val);if(t->left) q.push(t->left);if(t->right) q.push(t->right);}ret.push_back(path);;}return ret;}
};

 二、N叉树的层序遍历

. - 力扣(LeetCode)

class Solution {
public:vector<vector<int>> levelOrder(Node* root) {vector<vector<int>> ret;//记录最终的返回结果if(root==nullptr) return ret;queue<Node*> q;//层序遍历所需要的队列q.push(root);//先将根节点插入进去while(!q.empty()) //因为统计的是每层,所以我们没进去一次就要去统计一层。{int sz=q.size();//pop根节点的同时让他的孩子入队 //将左右孩子入队vector<int> path;//记录每层的结果for(int i=0;i<sz;++i){Node* t=q.front();q.pop();path.push_back(t->val);//开始让后面的节点入队for(Node* &child:t->children) if(child!=nullptr) q.push(child);}ret.push_back(path);}return ret;}
};

三、二叉树的锯齿形层序遍历

. - 力扣(LeetCode)

设置一个变量编辑层数,单层的不处理,双层的将path数组进行翻转

class Solution {
public:vector<vector<int>> zigzagLevelOrder(TreeNode* root){vector<vector<int>> ret;//帮助我们记录要返回的数组queue<TreeNode*> q;//层序遍历需要的队列if(root==nullptr) return ret;q.push(root);int k=1;//标记位while(!q.empty()){int sz=q.size();vector<int> path;//记录要插入的结果for(int i=0;i<sz;++i){TreeNode*t=q.front();//删除前拿到队头节点q.pop();path.push_back(t->val);//将结果插入进去if(t->left) q.push(t->left);if(t->right) q.push(t->right); }if(k%2==0) reverse(path.begin(),path.end());++k;ret.push_back(path);}return ret;}
};

四、每个树行中找最大值

. - 力扣(LeetCode)

层序遍历的时候更新一下最大值即可! 

class Solution {
public:vector<int> largestValues(TreeNode* root) {vector<int> ret;if(root==nullptr) return ret;queue<TreeNode*> q;q.push(root);while(!q.empty()){size_t n=q.size();//统计当前层int temp=INT_MIN;for(size_t i=0;i<n;++i){TreeNode*t=q.front();q.pop();temp=max(temp,t->val);//更新最大值//将孩子进队列if(t->left) q.push(t->left);if(t->right) q.push(t->right);}ret.emplace_back(temp);}return ret;}
};

五、二叉树的最大宽度(非常经典)

. - 力扣(LeetCode)

细节1:下标可能溢出

关键是这里借助无符号整型在溢出的时候自动根据32位,或者64位取模。

细节2:利用数组的存储方式给节点编号+移动赋值(右值引用提高效率)

 用vector模拟queue 把孩子和其对应的下标存在数组中,每一层处理完再进行移动赋值。

class Solution {
public:typedef pair<TreeNode*,unsigned int> PTU;int widthOfBinaryTree(TreeNode* root) {//用队列 直接连空节点也丢 超时//用数组模拟vector<PTU> q;//用数组来模拟队列q.emplace_back(root,1);unsigned int ret=1; //减掉之后不会影响结果while(!q.empty()){//先更新一下长度auto&[x1,y1]=q[0];auto&[x2,y2]=q.back();ret=max(ret,y2-y1+1);//用一个新的数组入队vector<PTU> temp;//用数组来模拟队列//让下一层进队列for(auto&[x,y]:q){if(x->left) temp.emplace_back(x->left,y*2); //插入pair类型可以体现出emplace_back//和push_back的区别 push_back({x->left,y*2})if(x->right) temp.emplace_back(x->right,y*2+1);}//更新一个新的数组q=move(temp); //移动赋值  窃取资源 效率更高}return ret;}
};

http://www.jmfq.cn/news/5306239.html

相关文章:

  • 关于网站建设的广告语/自己怎么免费做网站
  • 枣阳网站建设公司/移动端关键词排名优化
  • 上海市建设安全协会网站查询系统瘫/做企业网站建设公司哪家好
  • 国家建设部网站官网证件查询/百度浏览官网
  • 南宁网站建设速成培训/可口可乐软文范例
  • 网站建设怎么报价/seo是什么意思如何实现
  • 亳州网站建设/福州网站排名推广
  • 通化建设工程信息网站/uc浏览器关键词排名优化
  • 莘庄网站建设/网站策划书的撰写流程
  • 机关事业单位网站建设/哪个软件可以自动排名
  • 科技 网站建设/镇江网站
  • 棋牌网站建设/站长工具端口扫描
  • 网站建设公司 南宁/推广教程
  • 阿里巴巴公司网站建设/河南网络推广那家好
  • 全球网站建设服务商/网络营销特点
  • 吉林省建设厅证件查询网站/1元涨1000粉
  • 江苏省建设人才网站/百度一下你就知道移动官网
  • 网站建设实例大制作/交换链接适合哪些网站
  • 中国建设部建造师网站/广告推广软件
  • 建设网站合同/网站友情链接检测
  • 网站建设相关书籍/网页设计需要学什么软件
  • 山东网站建设费用/优化系统的软件
  • 哈尔滨网站建设工作室/搜索引擎推广实训
  • 天津网站建设服务/seo日常工作内容
  • 苏州市住房和城乡建设局网站首页/关键词挖掘ppt
  • 淄博周村网站建设公司/合肥seo推广公司哪家好
  • 建设一个门户网站需要多久/杭州seo网站推广排名
  • 衡水网站建设优化排名/北京网站建设开发公司
  • 网站建设怎么外包好/系统优化工具
  • 中国知名网站建设公司/谷歌网站