← Back to library
#199MediumTreeBFS AIに質問leetcode ↗

Binary Tree Right Side View

Given the root of a binary tree, imagine yourself standing on the right side of it, return the values of the nodes you can see ordered from top to bottom.

Example 1:

Input: root = [1,2,3,null,5,null,4] Output: [1,3,4]

Example 2:

Input: root = [1,2,3,4,null,null,null,5] Output: [1,3,4,5]

Example 3:

Input: root = [1,null,3] Output: [1,3]

Example 4:

Input: root = [] Output: []

Constraints:

  • The number of nodes in the tree is in the range [0, 100].
  • -100 <= Node.val <= 100
使用した概念BFS

アプローチ

思考
  • BFS で各レベルの要素の値を取得する
  • 各レベルの最後の値だけを result に格納する
  • queue がなくなるまで繰り返す
  • この解法には無駄がある
    • レベルごとに level 配列を作って全ノードの値を持っている
    • 本当に欲しいのは末尾の 1 個だけ
実装
class Solution:
    def rightSideView(self, root: Optional[TreeNode]) -> List[int]:
        if not root:
            return []

        queue = deque([root])
        result = []

        while queue:
            level = []
            for _ in range(len(queue)):
                node = queue.popleft()
                level.append(node.val)
                if node.left:
                    queue.append(node.left)
                if node.right:
                    queue.append(node.right)
            if level:
                result.append(level[-1])
        return result
Time Space