给定一个二叉树的 根节点 root
,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
示例 1:
输入: [1,2,3,null,5,null,4] 输出: [1,3,4]
示例 2:
输入: [1,null,3] 输出: [1,3]
示例 3:
输入: [] 输出: []
实现方法:
1.使用递归函数,传递当前节点和当前的深度。
2.检查当前深度是否已经在结果列表中有对应的值,如果没有,则添加当前节点值(这意味着这是该层级首次访问到的节点,从右边看过去首先看到的节点)。
3.优先递归访问右子节点,然后是左子节点,这样可以保证右侧节点优先被处理。
作者:GoAhead
链接:. - 力扣(LeetCode)
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
代码:
/**
* 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> res;
int depth = 0;
vector<int> rightSideView(TreeNode* root) {
dfs(root,depth);
return res;
}
void dfs(TreeNode * root , int depth) {
// 如果当前节点所在深度还没有出现在res里,说明在该深度下当前节点是第一个被访问的节点,因此将当前节点加入res中。
if (root == nullptr){
return;
}
if (depth == res.size()){
res.push_back(root->val);
}
depth++;// 先访问 当前节点,再递归地访问 右子树 和 左子树。
dfs(root->right,depth);
dfs(root->left,depth);
}
};