# https://leetcode.com/problems/binary-tree-right-side-view from collections import deque from typing import Deque, List, Optional, Set, Tuple class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right class Solution: def rightSideView(self, root: Optional[TreeNode]) -> List[int]: result: List[int] = [] q: Deque[Tuple[TreeNode, int]] = deque() levels: Set[int] = set() if root is None: return result q.append((root, 0)) while len(q) > 0: (curr, curr_level) = q.popleft() if curr_level not in levels: levels.add(curr_level) result.append(curr.val) if curr.right is not None: q.append((curr.right, curr_level + 1)) if curr.left is not None: q.append((curr.left, curr_level + 1)) return result