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
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;
}
Python q[-1] gets last element. Java checks index at level end.
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
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;
}
1. BFS level by level 2. Record last of each level