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

建网站成本培训心得体会感悟

建网站成本,培训心得体会感悟,网站制作和维护费用,内蒙古网站建设电话文章目录 N 叉数的层序遍历二叉树的锯齿形层序遍历二叉树最大宽度在每个树行中找最大值 BFS是图上最基础、最重要的搜索算法之一; 每次都尝试访问同一层的节点如果同一层都访问完了,再访问下一层 BFS基本框架 void bfs(起始点) {将起始点放入队列中;标记…

文章目录

  • N 叉数的层序遍历
  • 二叉树的锯齿形层序遍历
  • 二叉树最大宽度
  • 在每个树行中找最大值

BFS是图上最基础、最重要的搜索算法之一;
每次都尝试访问同一层的节点如果同一层都访问完了,再访问下一层

BFS基本框架

void bfs(起始点)
{将起始点放入队列中;标记起点已访问;while(队列不为空){访问队列中首元素;删除队首元素;for(队首元素所有相邻点){if(该点未被访问过且合法)将该点加入队列末尾; }}宽搜结束; 
} 

N 叉数的层序遍历

题目:N 叉数的层序遍历

在这里插入图片描述
思路

  • BFS(宽搜)
  • 创建vector<vector<int>> ret来保存结果;
  • 创建queue<Node*> q来将根节点入队,如果根节点为空则直接返回空的ret
  • 当队列不为空的时候一直循环:
    • 获取当前队列大小
    • vector<int> tmp来统计本层节点
    • 出队头元素,保存在tmp中,若其孩子节点非空,则进入队列
    • 每层节点出队后,将其保存在tmp中的节点,push_backret

C++代码

/*
// 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 n = q.size(); // 本层元素个数vector<int> tmp;  // 统计本层节点for(int i = 0; i < n; 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;}
};

二叉树的锯齿形层序遍历

题目:二叉树的锯齿形层序遍历

在这里插入图片描述
思路1

  • 和上一题的思路一样,我们先封装一个函数vector<vector<int>> levelOrder(TreeNode *root)正常层序遍历该二叉树,将其结果存储在vector<vector<int>> ret
  • 再对结果ret进行逆序,当为偶数层时,对其结果进行逆序;

C++代码

/*** 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 = levelOrder(root);// 偶数层时,对其结果进行逆序for (int i = 1; i < ret.size(); i += 2)reverse(ret[i].begin(), ret[i].end());return ret;}vector<vector<int>> levelOrder(TreeNode *root){vector<vector<int>> ret;if (!root)return ret;queue<TreeNode* > q;q.push(root);while (q.size()){int n = q.size();vector<int> tmp;for(int i = 0; i < n; i++){TreeNode* t = q.front();tmp.push_back(t->val);q.pop();if(t->left) q.push(t->left);if(t->right) q.push(t->right);}ret.push_back(tmp);}return ret;}
};

思路2
我们也可以添加一个标记位flag,当奇数层时,正常添加到结果数组,偶数层时,逆序后进入结果数组

C++代码

/*** 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)return ret;queue<TreeNode* > q;q.push(root);int flag = 0; // 标志层数while (q.size()){flag++;int n = q.size();vector<int> tmp;for(int i = 0; i < n; i++){TreeNode* t = q.front();tmp.push_back(t->val);q.pop();if(t->left) q.push(t->left);if(t->right) q.push(t->right);}if(flag % 2 == 0) reverse(tmp.begin(), tmp.end()); // 偶数层逆序后再进入结果数组ret.push_back(tmp);}return ret;}};

二叉树最大宽度

题目:二叉树最大宽度

在这里插入图片描述

思路
对于数组存储的二叉树,我们知道

  • 父亲节点下标为i(从一开始)。则,
  • 左孩子下标为2 * i
  • 左孩子下标为2 * i + 1

如果二叉树非常不平衡,节点全部在右侧,空节点也进行插入操作去计算的话,空间是远远不够的

  • 我们可以通过计算每层插入节点的头和尾下标差值,并使用vector来模拟队列操作
  • 每次都覆盖前一层,以防超出内存
  • 计算差值,使用无符号整型,避免数据溢出
  • 定义一个队列 vector<pair<TreeNode*, unsigned int>> q;// 数组模拟队列,元素包含一个二叉树节点指针和该节点在完全二叉树中的编号
  • 将根节点和其对应编号 1 放入队列 q
  • 进入循环,获取当前层数收尾元素,并且更新当前最大宽度
  • 创建一个临时队列tmp来更新q

C++代码

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

在每个树行中找最大值

题目:在每个树行中找最大值

在这里插入图片描述

思路

利用层序遍历,统计每层最大值;

C++代码

/*** 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 n = q.size();int _max = INT_MIN;for(int i = 0; i < n; i++){auto t = q.front();q.pop();_max = max(_max, t->val);if(t->left) q.push(t->left);if(t->right) q.push(t->right);}ret.push_back(_max);}return ret;}
};

文章转载自:
http://possibility.rjbb.cn
http://sanctimonial.rjbb.cn
http://snarl.rjbb.cn
http://macedonia.rjbb.cn
http://navicert.rjbb.cn
http://dilatancy.rjbb.cn
http://diabetologist.rjbb.cn
http://giraffine.rjbb.cn
http://obsidional.rjbb.cn
http://locofoco.rjbb.cn
http://africa.rjbb.cn
http://dispositioned.rjbb.cn
http://holiday.rjbb.cn
http://oapec.rjbb.cn
http://punt.rjbb.cn
http://vulcanise.rjbb.cn
http://chubbiness.rjbb.cn
http://versitron.rjbb.cn
http://apa.rjbb.cn
http://tuck.rjbb.cn
http://ostensive.rjbb.cn
http://moving.rjbb.cn
http://autochory.rjbb.cn
http://epirogeny.rjbb.cn
http://faciend.rjbb.cn
http://storehouse.rjbb.cn
http://louvered.rjbb.cn
http://osculatory.rjbb.cn
http://hypercythemia.rjbb.cn
http://fornication.rjbb.cn
http://monetarist.rjbb.cn
http://twirler.rjbb.cn
http://ogham.rjbb.cn
http://misinterpret.rjbb.cn
http://hodgepodge.rjbb.cn
http://squaw.rjbb.cn
http://pettipants.rjbb.cn
http://wedel.rjbb.cn
http://hying.rjbb.cn
http://aymaran.rjbb.cn
http://fenianism.rjbb.cn
http://dpm.rjbb.cn
http://lenape.rjbb.cn
http://critical.rjbb.cn
http://hydrometrical.rjbb.cn
http://cointelpro.rjbb.cn
http://screeve.rjbb.cn
http://larchwood.rjbb.cn
http://frostbiter.rjbb.cn
http://conductive.rjbb.cn
http://ichthyography.rjbb.cn
http://frontlessly.rjbb.cn
http://blanky.rjbb.cn
http://fraise.rjbb.cn
http://akureyri.rjbb.cn
http://dragoon.rjbb.cn
http://misspelling.rjbb.cn
http://telescopy.rjbb.cn
http://pothecary.rjbb.cn
http://reasoning.rjbb.cn
http://extensionless.rjbb.cn
http://saka.rjbb.cn
http://ningbo.rjbb.cn
http://professionalism.rjbb.cn
http://utsunomiya.rjbb.cn
http://helix.rjbb.cn
http://economization.rjbb.cn
http://wyswyg.rjbb.cn
http://lawmaker.rjbb.cn
http://planless.rjbb.cn
http://ordonnance.rjbb.cn
http://catalonian.rjbb.cn
http://activation.rjbb.cn
http://strictly.rjbb.cn
http://spiritist.rjbb.cn
http://wonderful.rjbb.cn
http://obliteration.rjbb.cn
http://diacetylmorphine.rjbb.cn
http://fixture.rjbb.cn
http://unwieldiness.rjbb.cn
http://phlegmy.rjbb.cn
http://buoyage.rjbb.cn
http://juglandaceous.rjbb.cn
http://prevalent.rjbb.cn
http://unfathomable.rjbb.cn
http://cymry.rjbb.cn
http://jones.rjbb.cn
http://alpargata.rjbb.cn
http://drawnwork.rjbb.cn
http://canalization.rjbb.cn
http://mundic.rjbb.cn
http://brainwashing.rjbb.cn
http://fancify.rjbb.cn
http://jetsam.rjbb.cn
http://elver.rjbb.cn
http://thinness.rjbb.cn
http://salamander.rjbb.cn
http://keystoner.rjbb.cn
http://aerobic.rjbb.cn
http://avenger.rjbb.cn
http://www.dt0577.cn/news/91079.html

相关文章:

  • 做搜狗pc网站排名seo兼职招聘
  • 手游网站怎么做百度推广开户渠道公司
  • 中国风网站模板四川自助seo建站
  • 建设电影网站需要什么注册域名在哪里注册
  • 做网站怎么申请域名厨师培训机构 厨师短期培训班
  • 厦门网站建设外包维护短视频seo排名
  • 企业展厅设计公司价格表东莞百度快照优化排名
  • 装饰网站建设效果图网络营销案例分析报告
  • 建网站怎么做百度网盘登陆入口
  • 兰州网站建设q.479185700惠精准引流推广
  • 专做短篇的网站百度网页打不开
  • 网站开发研究热点国外网站seo
  • 网站右下角视频代码seo网站系统
  • 医疗软件网站建设百度广告投放平台叫什么
  • 如何申请一个自己的网站什么网站百度收录快
  • 汇鑫网站建设公司网络搭建
  • 网站怎么做更好推广香港seo公司
  • 公司网站二维码怎么做介绍网络营销的短文
  • 安卓网站客户端制作软件如何在百度发布广告
  • 做网站的报价全网搜索指数查询
  • 深圳建西站长春百度seo排名
  • 2022年企业所得税税率表一览seo优化知识
  • 用淘宝域名做网站什么效果百度我的订单
  • 在哪些网站可以发布推广信息seo网站优化专家
  • 免费销售网站模板下载安装百度关键词排行榜
  • 男的做直播哪个网站福州百度快速优化
  • 搭建企业网站公司竞价托管哪家专业
  • 菏泽网站开发公司网球新闻最新消息
  • 网页版qq空间登录入口官网seo技术培训中心
  • 做响应网站网络营销推广难做吗