news 2026/1/20 1:18:55

二叉树的右视图(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/1/19 9:46:34

验证回文串,x的平方根(左右指针)

这个题用暴力法会超时&#xff0c;使用左右指针。首先考虑如果不允许删除字符&#xff0c;如何判断一个字符串是否是回文串。常见的做法是使用双指针。定义左右指针&#xff0c;初始时分别指向字符串的第一个字符和最后一个字符&#xff0c;每次判断左右指针指向的字符是否相同…

作者头像 李华
网站建设 2026/1/18 1:12:10

ant design pro不安装第三方库,如何实现多标签页面(带源码)

在中后台管理系统开发场景中&#xff0c;动态标签页是提升用户操作体验的核心功能 —— 它模拟浏览器标签页交互逻辑&#xff0c;支持多页面并行操作、自由切换&#xff0c;还能保留用户的操作轨迹。本文将基于 React Umi&#xff08;umijs/max&#xff09; Ant Design 技术栈…

作者头像 李华
网站建设 2026/1/14 11:24:12

2025最新!研究生必备8个AI论文平台:开题报告与文献综述全测评

2025最新&#xff01;研究生必备8个AI论文平台&#xff1a;开题报告与文献综述全测评 2025年研究生必备AI论文平台测评&#xff1a;如何选择高效工具&#xff1f; 在科研日益数字化的今天&#xff0c;研究生群体对AI论文工具的需求愈发迫切。从开题报告到文献综述&#xff0c;从…

作者头像 李华
网站建设 2026/1/19 14:04:02

基于SpringBoot的图书管理系统的设计与实现毕业设计项目源码

项目简介 在图书馆数字化升级、借阅服务精细化需求下&#xff0c;传统图书管理存在 “借阅流程繁琐、库存盘点低效、读者画像缺失” 的痛点&#xff0c;基于 SpringBoot 构建的图书管理系统&#xff0c;适配读者、图书管理员、馆内运营人员等角色&#xff0c;实现图书借阅、馆藏…

作者头像 李华
网站建设 2026/1/14 4:43:17

2025最新!9款AI论文软件测评:本科生写论文必备神器

2025最新&#xff01;9款AI论文软件测评&#xff1a;本科生写论文必备神器 2025年AI论文工具测评&#xff1a;为何值得一看&#xff1f; 随着人工智能技术的不断进步&#xff0c;AI论文写作工具逐渐成为高校学生&#xff0c;尤其是本科生撰写学术论文的重要辅助手段。然而&…

作者头像 李华