< All posts

515. Find Largest Value in Each Tree Row

๋ฌธ์ œ ์„ค๋ช…

๋ชจ๋“  ์ธต์— ๋Œ€ํ•ด์„œ ์ธต์˜ ๊ฐ€์žฅ ํฐ ์ˆซ์ž๋ฅผ ๋ชจ๋‘ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฌธ์ œ๋‹ค.

515


์˜ค๋Š˜์€ ํฌ๋ฆฌ์Šค๋งˆ์Šค๋‹ค! ์–ด์ œ ์ธํ„ด ์ถœ๊ทผ 2์ผ์ฐจ์ด๋ฉฐ, ๋„ˆ๋ฌด ๋‹ฌ๋ ค์™€์„œ ์˜ค๋Š˜์€ ๋Šฆ์ž  ์ž˜ ์ƒ๊ฐ์„ ํ•˜๊ณ  ์žˆ์—ˆ์œผ๋‚˜ ๋ˆˆ์ด 6์‹œ์— ๋– ์ง€๋Š” ๋ฐ”๋žŒ์— ์‹ฌ์‹ฌํ•ด์„œ ํšŒ์‚ฌ ๋‹ค๋…€์™”๋‹ค.

ํ’€์ด ๋ฐ ํ•ด์„ค

ํ’€์ด

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def largestValues(self, root: Optional[TreeNode]) -> List[int]:
        if not root:
            return []

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

        while queue:
            level_size = len(queue)
            level_max = float('-inf')

            for i in range(level_size):
                node, level = queue.popleft()

                level_max = max(level_max, node.val)

                if node.left:
                    queue.append((node.left, level+1))
                if node.right:
                    queue.append((node.right, level+1))

            result.append(level_max)
        
        return result
  • ๋ฃจํŠธ๊ฐ€ ๋น„์–ด์žˆ์œผ๋ฉด ๋ฐ”๋กœ ๋ฐ˜ํ™˜
  • result arr ํ•˜๋‚˜ ์ดˆ๊ธฐํ™”
  • deque๋ฅผ (root,0)๋กœ ์ดˆ๊ธฐํ™”
  • ํ์— ๋ฌด์–ธ๊ฐ€ ์กด์žฌํ•  ๊ฒฝ์šฐ,
    • ์ธต๊ณผ ์ธต์˜ ์ง€๊ธˆ๊นŒ์ง€ ๊ฐ€์žฅ ๋†’์€ ์ˆซ์ž๋ฅผ ์ดˆ๊ธฐํ™”
      • ํ์˜ ๊ธธ์ด๋งŒํผ,
        • ๊ฐ’๊ณผ ์ธต์„ ๋ฐ›๊ณ 
        • ๊ฐ’์ด ์ง€๊ธˆ ๊ฐ€์žฅ๊นŒ์ง€์˜ ๊ฐ€์žฅ ํฐ ๊ฐ‘๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ ๊ต์ฒด
      • ์™ผ์ชฝ ์ž์‹์ด ์žˆ์œผ๋ฉด ํ์— ์ถ”๊ฐ€
      • ์˜ค๋ฅธ์ชฝ ์ž์‹์ด ์žˆ์œผ๋ฉด ํ์— ์ถ”๊ฐ€

Complexity Analysis

์‹œ๊ฐ„ ๋ณต์žก๋„

  • BFS๋กœ ํƒ์ƒ‰์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— O(N)๋งŒํผ ๊ฑธ๋ฆฐ๋‹ค.

๊ณต๊ฐ„ ๋ณต์žก๋„

  • O(N)

Constraint Analysis

Constraints:
The number of nodes in the tree will be in the range [0, 104].
-2^31 <= Node.val <= 2^31 - 1

References

ยฉ 2025 HyunJoon Sung. All Rights Reserved.

GitHub