← Trees

Right Side View

Medium
Python
from collections import deque
def right_side_view(root):
    if not root: return []
    res=[]; q=deque([root])
    while q:
        res.append(q[-1].val)
        for _ in range(len(q)):
            node=q.popleft()
            if node.left: q.append(node.left)
            if node.right: q.append(node.right)
    return res
Java
public List<Integer> rightSideView(TreeNode root){
    List<Integer> res=new ArrayList<>();
    if(root==null) return res;
    Queue<TreeNode> q=new LinkedList<>(); q.offer(root);
    while(!q.isEmpty()){
        int size=q.size();
        for(int i=0;i<size;i++){
            TreeNode node=q.poll();
            if(i==size-1) res.add(node.val);
            if(node.left!=null) q.offer(node.left);
            if(node.right!=null) q.offer(node.right);
        }
    } return res;
}

Key Insight

Python q[-1] gets last element. Java checks index at level end.

Python → Java Differences

  • q[-1] accesses last in deque
  • Java checks i==size-1
  • BFS level-order identical
Python
from collections import deque
def right_side_view(root):
    if not root: return []
    res=[]; q=deque([root])
    while q:
        res.append(q[-1].val)
        for _ in range(len(q)):
            node=q.popleft()
            if node.left: q.append(node.left)
            if node.right: q.append(node.right)
    return res
Java
public List<Integer> rightSideView(TreeNode root){
    List<Integer> res=new ArrayList<>();
    if(root==null) return res;
    Queue<TreeNode> q=new LinkedList<>(); q.offer(root);
    while(!q.isEmpty()){
        int size=q.size();
        for(int i=0;i<size;i++){
            TreeNode node=q.poll();
            if(i==size-1) res.add(node.val);
            if(node.left!=null) q.offer(node.left);
            if(node.right!=null) q.offer(node.right);
        }
    } return res;
}

Algorithm Steps

1. BFS level by level
2. Record last of each level