Solution to Binary Tree Right Side View Problem.

Do level order traversal and keep track of the last element processed in a level. Add the last element of each level to the result list.

class Solution {
    public List<Integer> rightSideView(TreeNode root) {
        if(root == null) {
            return Collections.emptyList();
        }
        List<Integer> result = new ArrayList<>();
        
        Queue<TreeNode> q = new LinkedList<>();
        q.add(root);
        while(!q.isEmpty()) {
            int ls = q.size();
            TreeNode pre = null;
            for(int i=0;i<ls;i++) {
                TreeNode cur = q.remove();
                if(cur.left != null)
                    q.add(cur.left);
                if(cur.right != null)
                    q.add(cur.right);
                pre = cur;
            }
            result.add(pre.val);
            
        }
        
        return result;
    }
}