news 2026/4/25 21:57:21

【Hot 100 刷题计划】 LeetCode 199. 二叉树的右视图 | C++ DFS 逆序遍历

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Hot 100 刷题计划】 LeetCode 199. 二叉树的右视图 | C++ DFS 逆序遍历

LeetCode 199. 二叉树的右视图

📌 题目描述

题目级别:中等

给定一个二叉树的根节点root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

  • 示例 1:
    输入:root = [1,2,3,null,5,null,4]
    输出:[1,3,4]

💡 破题思路:根-右-左 DFS 探测

这道题最巧妙的解法不是层序遍历,而是带深度的深度优先搜索 (DFS)

核心逻辑:

  1. 我们按照“根节点 -> 右子树 -> 左子树”的顺序进行递归。
  2. 为什么要先递归右子树?因为这样可以保证在每一个深度(层级),我们访问到的第一个节点一定是该层最右边的节点。
  3. 我们维护一个结果数组res。在递归过程中,如果当前res的长度正好等于当前的深度level,就说明当前深度是第一次被访问,那么当前节点就是我们要找的“右侧视图节点”。

性能优势:
相比于 BFS 需要维护一个队列,这种 DFS 写法空间复杂度更低,且代码极其简洁。


💻 C++ 代码实现 (DFS 规范版)

classSolution{public:vector<int>rightSideView(TreeNode*root){vector<int>res;dfs(root,0,res);returnres;}// 💡 重点:通过引用传递 res,并在递归时先走右边voiddfs(TreeNode*root,intdepth,vector<int>&res){if(!root)return;// 如果结果集的大小等于当前深度,说明这一层最右边的节点刚被发现if(res.size()==depth){res.push_back(root->val);}// 先往右边冲!保证右边节点先占坑dfs(root->right,depth+1,res);// 再往左边走dfs(root->left,depth+1,res);}};
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/25 21:54:26

再谈Agent核心模式:ReAct、Plan-and-Solve 与 ToT

很多 Agent 原型跑得很顺&#xff0c;一进真实业务长链路就开始失控。它能查一个订单&#xff0c;也能调用一个工具&#xff0c;但一旦任务变成“先判断客户等级&#xff0c;再查合同&#xff0c;再核对 SLA&#xff0c;再生成补偿方案&#xff0c;再发起审批”&#xff0c;简单…

作者头像 李华
网站建设 2026/4/25 21:53:07

光储并网Simulink仿真模型与直流微电网研究

光储并网simulink仿真模型&#xff0c;直流微电网。 光伏系统采用扰动观察法是实现mppt控制&#xff0c;储能可由单独蓄电池构成&#xff0c;也可由蓄电池和超级电容构成的混合储能系统&#xff0c;并采用lpf进行功率分配。 并网采用pq控制实现稳定功率输送。 附对应wen献光伏和…

作者头像 李华
网站建设 2026/4/25 21:52:27

LeakyRelu链式法则

# 分解版 class LeakyRelu:# 初始化def __init__(self, slope0.1):# α是一个在训练时从一个均匀分布中随机选择的参数&#xff0c;用于控制负数区域的斜率self.slope slopeself.mask Nonedef forward(self, x):self.mask (x < 0)y x.copy() # 复制输入数据&#xff0c;…

作者头像 李华
网站建设 2026/4/25 21:49:50

终极指南:如何用30个Illustrator脚本将设计效率提升10倍

终极指南&#xff1a;如何用30个Illustrator脚本将设计效率提升10倍 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 还在为Adobe Illustrator中重复繁琐的操作而烦恼吗&#xff1f;…

作者头像 李华
网站建设 2026/4/25 21:41:42

掌握C++异常处理:从基础到高级实践

C异常处理详解1. 异常处理基础异常是程序运行时发生的非正常情况&#xff0c;如除零错误、内存访问越界等。C通过try、catch和throw机制实现异常处理&#xff1a;try {// 可能抛出异常的代码if (denominator 0) {throw std::runtime_error("Division by zero");}res…

作者头像 李华