题目来源
题目描述
class Solution {
public:
vector<int> rightSideView(TreeNode* root){
}
};
题目解析
使用层序遍历,并只保留每层最后一个节点的值
层序遍历
vector<int> rightSideView(TreeNode* root) {
vector<int> ans;
if(root == NULL){
return ans;
}
std::queue<TreeNode *> queue;
queue.push(root);
while (!queue.empty()){
int size = queue.size();
for (int i = 0; i < size; ++i) {
TreeNode *peek = queue.front();
queue.pop();
if(i == size -1){
ans.push_back(peek->val);
}
if(peek->left){
queue.push(peek->left);
}
if(peek->right){
queue.push(peek->right);
}
}
}
return ans;
}
递归
我们对树进行深度优先搜索,在搜索过程中,我们总是先访问右子树。那么对于每一层来说,我们在这层见到的第一个结点一定是最右边的结点。
// 树中的节点数在 [1, 104]范围内
void helper(TreeNode* root, int depth, vector<int> &ans){
if(root == NULL){
return;
}
if(ans.size() == depth){
ans.push_back(root->val);
}
helper(root->right, depth + 1, ans);
helper(root->left, depth + 1, ans);
}
vector<int> rightSideView(TreeNode* root) {
vector<int> ans;
helper(root, 0, ans);
return ans;
}