Binary Tree Right Side View — BFS Last Element Per Level
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