解法一: recursion
class Solution {
public:
vector<int> rightSideView(TreeNode* root) {
if(!root) return {};
vector<int> left = rightSideView(root->left);
vector<int> right = rightSideView(root->right);
int l = left.size();
int r = right.size();
if(l>r){
right.insert(right.end(), left.begin()+right.size(), left.end());
}
right.insert(right.begin(), root->val);
return right;
}
};
解法二:non-recursion
class Solution {
public:
vector<int> rightSideView(TreeNode* root) {
vector<int> res;
if(!root) return res;
queue<TreeNode*> q;
q.push(root);
while(!q.empty()){
res.push_back(q.back()->val);
int s = q.size();
for(int i=0;i<s;i++){
TreeNode* t = q.front(); q.pop();
if(t->left) q.push(t->left);
if(t->right) q.push(t->right);
}
}
return res;
}
};