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

二叉树的右视图(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; } };
http://www.jsqmd.com/news/135567/

相关文章:

  • springboot-vue民办高校教师职称晋升系统vue_1f1ty
  • 开发板Linux系统挂载nfs文件系统
  • LLM Weekly(2025.12.15-12.21)
  • 基于ARMCortex-M4F内核的MSP432MCU开发实践【2.6】
  • 基于SpringBoot+Vue的企业固定资产管理系统设计与实现
  • 验证回文串,x的平方根(左右指针)
  • ant design pro不安装第三方库,如何实现多标签页面(带源码)
  • 实用指南:Java Spring Boot结合Elasticsearch高性能搜索服务设计与实战经验分享:广州电商商品智能搜索落地
  • 【课程设计/毕业设计】基于SpringBoot的救援指挥系统基于springboot的户外救援系统【附源码、数据库、万字文档】
  • 基于Springboot+Vue的社区老年医疗服务系统设计与实现
  • 《深度学习》CUDA安装配置、pytorch库、torchvision库、torchaudio库安装
  • WiseAgent智能体框架实战之CrewAI篇(四) - 优化智能体的问答能力与记忆系统
  • 建议收藏!2025最新论文降AI率保姆级攻略,学生党必看。
  • Hadoop - 资源调度器YARN和计算引擎MapReduce/Tez/Spark之间是什么关系?
  • 【计算机毕业设计案例】基于Springboot+Vue党员教育和管理系统基于springboot的高校党员信息管理系统(程序+文档+讲解+定制)
  • 基于深度学习的蘑菇种类识别系统的设计与实现(源代码+文档+PPT+调试+讲解)
  • Anthropic 开源 Bloom:基于 LLM 的自动化行为评估框架
  • 超越RLVR陷阱:从设计“奖励契约”到构建“AI宪法”的架构思想
  • Linux:awk升级到5.0.3最新版本(源码编译升级方式)
  • 基于深度学习的淘宝用户购物可视化与行为预测系统设计(源代码+文档+PPT+调试+讲解)
  • 2025最新!10个AI论文网站测评:本科生写论文救星大公开
  • ModelEngine AI Agent通过Nexent 是一个开源智能体SDK和平台打造全能搜索助手
  • 计算机Java毕设实战-基于springBool+Vue小吃美食分享平台的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 长亭推出工程级AI开发平台MonkeyCode,开启AI工程级开发新模式
  • 【计算机毕业设计案例】vue和springboot框架开发的户外救援系统基于springboot的户外救援系统(程序+文档+讲解+定制)
  • 基于深度学习的图书推荐系统(源代码+文档+PPT+调试+讲解)
  • 6-10 WPS JS宏 映射应用
  • 完整教程:学算法总换设备?Hello-Algo+cpolar 让学习进度随身带
  • 敏捷咨询:从落地到深耕的全流程赋能之路
  • XML DOM