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

网站建设如何报价郑州seo询搜点网络效果佳

网站建设如何报价,郑州seo询搜点网络效果佳,合肥网站建设平台,全国物流网站二叉树与图(C刷题笔记) 113. 路径总和 II 力扣 从根节点深度遍历二叉树,先序遍历时,将节点存储至path栈中,使用path_val累加节点值 当遍历到叶子节点,检查path_val是否为sum,若是&#xff0c…

二叉树与图(C++刷题笔记)

113. 路径总和 II

力扣

  • 从根节点深度遍历二叉树,先序遍历时,将节点存储至path栈中,使用path_val累加节点值

  • 当遍历到叶子节点,检查path_val是否为sum,若是,则将pathpush进入res的结果中去

  • 在后续变量,将该节点从path栈中弹出,path_val减去节点值

题目代码

/*** 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>> pathSum(TreeNode* root, int targetSum) {vector<vector<int> >res;vector<int>path;int path_val=0;preorder(root,path_val,targetSum,path,res);return res;}void preorder(TreeNode *nd,int &path_val,int sum,vector<int>&path,vector<vector<int> >&res){if(!nd)return;path_val+=nd->val;path.push_back(nd->val);if(!nd->right&&!nd->left&&path_val==sum){res.push_back(path);}preorder(nd->left,path_val,sum,path,res);preorder(nd->right,path_val,sum,path,res);path_val-=nd->val;path.pop_back();}};

236. 二叉树的最近公共祖先

力扣

  • 两个节点公共祖先一定从根节点,至这两个节点的路径上

  • 由于求公共祖先中的最近公共祖先,那么即同时出现在这两条路径上的里根几点最远的节点

  • 求两个节点路径最后一个相同的节点

求根节点到某一个节点的路径

  • 从根节点遍历至该节点,找到节点后就结束搜索

  • 将遍历过程中遇到的节点按顺序存储,节点即路径

  void dfs(TreeNode *nd,TreeNode *search,vector<TreeNode *>&path,vector<TreeNode *>&res,int &end){if(!nd||end==1)return;path.push_back(nd);if(nd==search){end=1;res=path;}dfs(nd->left,search,path,res,end);dfs(nd->right,search,path,res,end);path.pop_back();}

求两路径下最后一个相同节点

  • 求出较短路径长度n

  • 同时遍历p节点与q节点路径,遍历n个节点,最后一个相同的节点即最近公共祖先

题目代码

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {vector<TreeNode *>path;vector<TreeNode *>p_path;vector<TreeNode *>q_path;int end=0;dfs(root,p,path,p_path,end);path.clear();end=0;dfs(root,q,path,q_path,end);int path_len=0;if(p_path.size()<q_path.size()){path_len=p_path.size();} else{path_len=q_path.size();}TreeNode *res=NULL;for (int i = 0; i < path_len; ++i) {if(p_path[i]==q_path[i]){res=p_path[i];}}return res;}void dfs(TreeNode *nd,TreeNode *search,vector<TreeNode *>&path,vector<TreeNode *>&res,int &end){if(!nd||end==1)return;path.push_back(nd);if(nd==search){end=1;res=path;}dfs(nd->left,search,path,res,end);dfs(nd->right,search,path,res,end);path.pop_back();}
};

114. 二叉树展开为链表

力扣

  • 前序遍历二叉树,将指针push进入vector,顺序遍历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:void flatten(TreeNode* root) {vector<TreeNode *>vec;preorder(root,vec);for (int i = 1; i <vec.size(); ++i) {vec[i-1]->left=NULL;vec[i-1]->right=vec[i];}}void preorder(TreeNode *nd,vector<TreeNode *>&vec){if(!nd)return;vec.push_back(nd);preorder(nd->left,vec);preorder(nd->right,vec);}
};

199. 二叉树的右视图

  • 从二叉树的右侧观察它,将观察到的节点从上到下顺序输出,就是求层次遍历二叉树,每层中最后一个节点

  • 层序遍历时,将节点与层数绑定为pair,压入队列时,将节点与层数同时压入队列,并记录每一层出现的最后一个节点

  • 层序遍历中,每一层的最后一个节点最后遍历到,随时更新对每层的最后一个节点即可

题目代码

/*** 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> rightSideView(TreeNode* root) {vector<int>view;queue<pair<TreeNode *,int> >Q;if(root){Q.push(make_pair(root,0));}while (!Q.empty()){TreeNode *nd=Q.front().first;int layer=Q.front().second;Q.pop();if(view.size()==layer){view.push_back(nd->val);} else{view[layer]=nd->val;}if(nd->left){Q.push(make_pair(nd->left,layer+1));}if(nd->right){Q.push(make_pair(nd->right,layer+1));}}return view;}
};

207. 课程表

力扣

  • n个课程m个依赖关系,看成顶点个数为n,边个数为m的有向图

  • 若为有向无环图,则可以完成课程

  • 否则不能

判断图是否有环

  • 深度优先遍历,如果正在遍历某一顶点(还未退出该顶点),又回到了该顶点,证明图有环

题目代码

struct node{int label;vector<node *>neighbors;//邻接表node(int x):label(x){};
};
class Solution {
public://0 正在访问 -1没有访问 1访问过bool dfs(node *nd,vector<int>&vis){vis[nd->label]=0;for (int i = 0; i <nd->neighbors.size() ; ++i) {if(vis[nd->neighbors[i]->label]==-1){if(dfs(nd->neighbors[i],vis)==0){return false;}}else if(vis[nd->neighbors[i]->label]==0){return false;}}vis[nd->label]=1;return true;}bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {vector<node*>graph;vector<int>vis;for (int i = 0; i < numCourses; ++i){graph.push_back(new node(i));vis.push_back(-1);}for (int i = 0; i < prerequisites.size(); ++i){node *begin=graph[prerequisites[i][1]];node *end=graph[prerequisites[i][0]];begin->neighbors.push_back(end);}for (int i = 0; i < graph.size(); ++i){if(vis[i]==-1&&!dfs(graph[i],vis)){return false;}}return true;}
};

拓扑排序

宽度优先搜索,将入度为0的点添加至队列,完成一个顶点的搜索时,把它指向的所有顶点的入度都减一,若此时莫顶点入读为0则添加队列,完成宽度优先搜索后,所有点入度为0,则图无环,否则有环

题目代码

class Solution {
public:bool canFinish(int numCourses, vector<vector<int>> &prerequisites) {vector<int> in;vector<vector<int> > graph;for (int i = 0; i < numCourses; ++i) {graph.push_back(vector<int>());in.push_back(0);}for (int i = 0; i < prerequisites.size(); ++i) {int end = prerequisites[i][0];int start = prerequisites[i][1];graph[start].push_back(end);in[end]++;}queue<int> Q;for (int i = 0; i < in.size(); ++i) {if (in[i] == 0) {Q.push(i);}}while (!Q.empty()) {int node = Q.front();Q.pop();for (int i = 0; i < graph[node].size(); ++i) {in[graph[node][i]]--;if (in[graph[node][i]] == 0) {Q.push(graph[node][i]);}}}for (int i = 0; i < in.size(); ++i) {if (in[i]) {return false;}}return true;}
};
http://www.hkea.cn/news/541869/

相关文章:

  • 上海黄浦 网站制作中国搜索引擎排名2021
  • 手机网站建设 cms营销技巧和营销方法
  • 平顶山做网站优化微博搜索引擎优化
  • 网站如何做品牌宣传海报每日舆情信息报送
  • 做论坛网站需要多大空间seo推广招聘
  • 中国建设银行网站软件不限次数观看视频的app
  • 网站开发建设的步骤win11优化大师
  • 在线做数据图的网站樱桃bt磁力天堂
  • 网站建设费的税率东莞公司网上推广
  • 上海设计公司排名前十宁波seo搜索优化费用
  • 如皋做网站公司com域名
  • 织梦做企业网站教程网络营销推广方案论文
  • 微信如何添加小程序二十条优化措施全文
  • 网站制作费可以做业务宣传费河北百度推广电话
  • wordpress日主题破解网站排名优化软件有哪些
  • 做公众号app 网站 app济南网站设计
  • 单位网站 单位网页 区别吗福州seo顾问
  • 专业做网站制作的公司百度地图网页版进入
  • 买卖网站域名骗局百度推广登陆
  • 石家庄大型网站设计公司手机怎么建网站
  • 政府网站图解怎么做百度关键词排名靠前
  • 天津做网站印标东莞网络推广排名
  • 设计一个外贸网站需要多少钱沈阳网站推广优化
  • 洗化行业做网站福州百度seo排名
  • 西安app网站开发项目腾讯域名注册官网
  • 网站开发的技术指标如何做网站搜索引擎优化
  • 建网站的要求老铁外链工具
  • wordpress有广告郑州seo优化大师
  • 企业网站推广的实验内容企业宣传网站
  • 如何开发高端市场宁波seo快速优化公司