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

制作网站公司网店装修工具

制作网站公司,网店装修工具,wordpress如何添加首页,公众号上传 wordpressProblem: 199. 二叉树的右视图 文章目录 题目描述思路解题方法复杂度Code 题目描述 思路 无论是DFS还是BFS我们都要思考到达二叉树的每一层(或者每一层中的每一个节点)时,我们都该如何按题目要求做出对应得处理!!!在本体中我们主要是&#x…

Problem: 199. 二叉树的右视图

文章目录

  • 题目描述
  • 思路
  • 解题方法
  • 复杂度
  • Code

题目描述

在这里插入图片描述在这里插入图片描述

思路

无论是DFS还是BFS我们都要思考到达二叉树的每一层(或者每一层中的每一个节点)时,我们都该如何按题目要求做出对应得处理!!!在本体中我们主要是:

1.当右子树与左子树等高或者右子树高于左子树时,我们只添加每一个右子树得右节点到结果集(根节点得左子树整个都去除)
2.当左子树高于右子树时,我们将等高得部分按1中处理,左子树高出右子树得部分,再将其右子树得右节点添加到结果集

解题方法

思路1:DFS

1.创建unordered_map<int, int> rightmostValueAtDepth;记录每一层应该添加到右视图的节点,int maxDepth = -1;记录并维护当前的最大深度,stack<TreeNode > nodeStack;用于DFS过程中的存储节点,stack depthStack;用于同时记录DFS过程中的树的深度;
2.将根节点添加到nodeStack中,while循环遍历(循环退出条件为nodeStack为空),每次弹出nodeStack和depthStack中的栈顶元素
node
depth
,若此时
node不为空
则更新最大深度,同时
若rightmostValueAtDepth[depth]不存在则添加到rightmostValueAtDepth中*;并且将node -> left;node -> right;depth + 1;depth + 1分别添加到对应的nodeStack和depthStack栈
3.最后将rightmostValueAtDepth中的值添加到一个一维数组中即可

思路2:BFS
大体实现直接套用BFS代码的模板书写即可,具体解释下面代码实现中的两个点

1.由于常规的BFS模板均是先添加左子树节点到队列,再添加右子树节点到队列所以我们可以利用数组元素可以覆盖的特性在每次添加节点到队列时,也将该节点值放入一个空间大小为1的数组temp中,这样操作后无论是思路中1、2哪种情况,都能保证最后添加到结果集中的节点值是复合题目右视图这个定义;
2.按常规BFS代码的实现(或者说就是按下面代码前面部分的操作)会导致最后一个被写到temp数组中的元素会添加两次到最终的结果集中,所以要push_back一次!!!

复杂度

思路1、2均如下
时间复杂度:

O ( n ) O(n) O(n)

空间复杂度:

O ( n ) O(n) O(n)

Code

思路1:

class Solution {
public:/*** DFS** @param root The root of a binary tree* @return vector<int>*/vector<int> rightSideView(TreeNode *root) {if (root == nullptr) {return {};}unordered_map<int, int> rightmostValueAtDepth;int maxDepth = -1;stack<TreeNode *> nodeStack;stack<int> depthStack;nodeStack.push(root);depthStack.push(0);while (!nodeStack.empty()) {TreeNode *node = nodeStack.top();nodeStack.pop();int depth = depthStack.top();depthStack.pop();if (node != nullptr) {//Maintain the maximum depth of a binary treemaxDepth = max(maxDepth, depth);//If not in the map collection, add itif (rightmostValueAtDepth.find(maxDepth) == rightmostValueAtDepth.end()) {rightmostValueAtDepth[depth] = node->val;}nodeStack.push(node->left);nodeStack.push(node->right);depthStack.push(depth + 1);depthStack.push(depth + 1);}}vector<int> res;for (int i = 0; i < maxDepth; ++i) {res.push_back(rightmostValueAtDepth[i]);}return res;}
};

思路2:

class Solution {
public:/*** BFS* * @param root The root of a binary tree* @return vector<int>*/vector<int> rightSideView(TreeNode* root) {if (root == nullptr) {return {};}if (root -> left == nullptr && root -> right == nullptr) {return {root -> val};}vector<int> res;vector<int> temp(1);queue<TreeNode*> queue;res.push_back(root -> val);queue.push(root);while (!queue.empty()) {int curLevelSize = queue.size();for (int i = 0; i < curLevelSize; ++i) {TreeNode* curLevelNode = queue.front();queue.pop();if (curLevelNode -> left != nullptr) {temp[0] = curLevelNode -> left -> val;queue.push(curLevelNode -> left);}if (curLevelNode -> right != nullptr) {temp[0] = curLevelNode -> right -> val;queue.push(curLevelNode -> right);}}res.push_back(temp[0]);}//Pop the last repetitive noderes.pop_back();return res;}
};
http://www.yayakq.cn/news/95006/

相关文章:

  • 坦克大战网站开发课程设计报告山东省监理建设协会网站
  • 网站开发建设计入什么科目网站建设与管理和电子商务哪个好
  • 浙江诚峰建设工程有限公司网站闵行区学生成长空间
  • 网站开发 总结报告网站分页用什么设置
  • 网站域名主机空间区别如何建立自己生活网站
  • php网站开发教程网站承建商有哪些
  • 商城网站静态模板下载本地wordpress站点上传
  • 使用cn域名做网站的多吗wordpress 登录状态
  • 宁波网站制作与推广工业产品设计怎样
  • 新会网站设计做网站的公司怎么拓展业务
  • 网站返回首页怎么做的好看免费网上教学平台
  • 响应式网站开发的特点建设部网站投标保证金
  • 海报模板网站有哪些3d模拟房子装修
  • 做那种的视频网站网贷审核网站怎么做
  • 国内做微商城比较知名的网站wordpress共享到微信
  • 网页设计新建站点门户网站主要包括哪些模块
  • erp管理系统免费版网站建设优化兰州
  • 免费私人网站wordpress登入后台没反应
  • 漂流瓶说自己是做网站的国家备案查询网
  • 阿里巴巴 网站建设手机网页制作工具下载
  • 网站接任务来做公司注销了网站备案的负责人
  • wordpress农业站模板下载攀枝花建设集团网站
  • 怎么给自己的网站做优化南京品牌网站设计
  • 基金从业培训网站网站开发的职责与分工
  • 北京外贸网站建设网站开发总监招聘
  • 自助建站系统哪个最好用wordpress xmmpp
  • 做枪版视频网站犯法吗商城网站开发模板
  • 营销网站开发哪家强网页设计与制作成品是啥样的
  • 网站的页头页脚怎么做seo排名优化软件免费
  • 网站建设合理性单位网站建设