news 2026/5/13 14:41:07

二叉树的右视图(BFS或DFS)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
二叉树的右视图(BFS或DFS)

思路:

1.BFS,使用队列模拟BFS,层序遍历二叉树,从右子树开始遍历,每层第一个访问的就是最右边的那个结点。

2.DFS,使用栈模拟DFS,从右子树开始遍历,遍历到底。对树进行深度优先搜索,在搜索过程中,总是先访问右子树。那么对于每一层来说,我们在这层见到的第一个结点一定是最右边的结点。

3.都需要知道当前结点在哪一层,所以要用map记录。可以存储在每个深度访问的第一个结点,一旦我们知道了树的层数,就可以得到最终的结果数组。

//BFS /** * 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) { if(root==nullptr) return {}; unordered_map<int,int> num; queue<pair<TreeNode*,int>> node_depth; node_depth.push({root,0}); int maxdep=-1; while(!node_depth.empty()){ auto p=node_depth.front(); node_depth.pop(); TreeNode* nod=p.first; int dep=p.second; if(nod!=nullptr){ maxdep=max(maxdep,dep); if(num.find(dep) == num.end()){ num[dep]=nod->val; } node_depth.push({nod->right,dep+1}); node_depth.push({nod->left,dep+1}); } } vector<int> rightsort; for(int i=0;i<=maxdep;i++){ rightsort.push_back(num[i]); } return rightsort; } }; //DFS class Solution { public: vector<int> rightSideView(TreeNode* root) { if(root==nullptr) return {}; unordered_map<int,int> num; stack<pair<TreeNode*,int>> node_depth; node_depth.push({root,0}); int maxdep=-1; while(!node_depth.empty()){ auto p=node_depth.top(); node_depth.pop(); TreeNode* nod=p.first; int dep=p.second; if(nod!=nullptr){ maxdep=max(maxdep,dep); if(num.find(dep) == num.end()){ num[dep]=nod->val; } node_depth.push({nod->left,dep+1}); node_depth.push({nod->right,dep+1}); } } vector<int> rightsort; for(int i=0;i<=maxdep;i++){ rightsort.push_back(num[i]); } return rightsort; } };
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/12 17:08:32

基于SpringBoot+Vue的企业固定资产管理系统设计与实现

前言 &#x1f31e;博主介绍&#xff1a;✌CSDN特邀作者、全栈领域优质创作者、10年IT从业经验、码云/掘金/知乎/B站/华为云/阿里云等平台优质作者、专注于Java、小程序/APP、python、大数据等技术领域和毕业项目实战&#xff0c;以及程序定制化开发、文档编写、答疑辅导等。✌…

作者头像 李华
网站建设 2026/5/10 13:48:09

基于SpringBoot的深圳市体育中心体育赛事管理系统毕业设计项目源码

项目简介在大型体育场馆赛事运营精细化、数字化需求下&#xff0c;深圳市体育中心传统赛事管理存在 “流程割裂、资源调度低效、数据统计滞后” 的痛点&#xff0c;基于 SpringBoot 构建的赛事管理系统&#xff0c;适配赛事运营人员、场馆管理员、参赛人员、观众等角色&#xf…

作者头像 李华
网站建设 2026/5/12 3:53:48

Windows系统文件rpcnsh.dll缺少损坏问题 下载修复方法

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

作者头像 李华