class Solution {
public:
    vector<int> rightSideView(TreeNode* root) {
        vector<int > res;

        vector<vector<int >> levelOrder;

        levelOrder = levelorder(root);

        for(auto it : levelOrder){
            res.push_back(it.back());
        }
        return res;
    }
private: 
    vector<vector<int>> levelorder(TreeNode* root){
        vector<vector<int>> res;

        if(!root){
            return res;
        }
        
        queue <TreeNode* > q;
        q.push(root);
        
        while(!q.empty()){
            int size = q.size();
            vector<int> level;
            
            for(int i =0 ; i< size; i++){
                TreeNode* node = q.front();
                q.pop();

                level.push_back(node->val);

                if(node->left !=NULL){
                    q.push(node->left);
                }
                if(node->right !=NULL){
                    q.push(node->right);
                }
            }

            res.push_back(level);
        }

        return res;
    }
};

https://takeuforward.org/data-structure/right-left-view-of-binary-tree/https://leetcode.com/problems/binary-tree-right-side-view/