Binary Tree Right Side View — BFS Last Element Per Level

Sanjeev SharmaSanjeev Sharma
1 min read

Advertisement

Problem 363 · Binary Tree Right Side View

Difficulty: Medium · Pattern: BFS + Last of Level

Solutions

# Python
from collections import deque
def rightSideView(root):
    if not root: return []
    queue = deque([root]); result = []
    while queue:
        for _ in range(len(queue)-1): queue.popleft()
        node = queue.popleft()
        result.append(node.val)
        if node.left: queue.append(node.left)
        if node.right: queue.append(node.right)
    return result

# DFS approach
def rightSideViewDFS(root):
    res = []
    def dfs(node, depth):
        if not node: return
        if depth == len(res): res.append(node.val)
        else: res[depth] = node.val  # override with rightmost
        dfs(node.left, depth+1)
        dfs(node.right, depth+1)
    dfs(root, 0)
    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 sz=q.size(); TreeNode last=null;
        while(sz-->0) {
            last=q.poll();
            if(last.left!=null) q.offer(last.left);
            if(last.right!=null) q.offer(last.right);
        }
        res.add(last.val);
    }
    return res;
}

Complexity

  • Time: O(n)
  • Space: O(w)

Advertisement

Sanjeev Sharma

Written by

Sanjeev Sharma

Full Stack Engineer · E-mopro