文章目录
- 1. 题目
- 2. 解题
- 2.1 DFS
- 2.2 queue按层从右边遍历
1. 题目
给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
示例:输入: [1,2,3,null,5,null,4]
输出: [1, 3, 4]
解释:1 <---/ \
2 3 <---\ \5 4 <---
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-right-side-view
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
2.1 DFS
- 用一个level变量表示深度,深度==存入的数据数量,则存入,否则,说明同层已经存入数据,不要再存了
class Solution {
public:vector<int> rightSideView(TreeNode* root) {vector<int> ans;dfs(root, ans, 0);return ans;}void dfs(TreeNode* root, vector<int> &ans, int level){if(root == NULL)return;if(ans.size() == level)ans.push_back(root->val);dfs(root->right, ans, level+1);dfs(root->left, ans, level+1);}
};
2.2 queue按层从右边遍历
- 每层的第一个数据存入
class Solution {
public:vector<int> rightSideView(TreeNode* root) {if(root == NULL)return {};vector<int> ans;queue<TreeNode*> q;q.push(root);int n;while(!q.empty()){n = q.size();ans.push_back(q.front()->val);while(n--){if(q.front()->right)q.push(q.front()->right);if(q.front()->left)q.push(q.front()->left);q.pop();}}return ans;}
};