LeetCode 199. 二叉树的右视图
📌 题目描述
题目级别:中等
给定一个二叉树的根节点root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
- 示例 1:
输入:root = [1,2,3,null,5,null,4]
输出:[1,3,4]
💡 破题思路:根-右-左 DFS 探测
这道题最巧妙的解法不是层序遍历,而是带深度的深度优先搜索 (DFS)。
核心逻辑:
- 我们按照“根节点 -> 右子树 -> 左子树”的顺序进行递归。
- 为什么要先递归右子树?因为这样可以保证在每一个深度(层级),我们访问到的第一个节点一定是该层最右边的节点。
- 我们维护一个结果数组
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);}};