본문 바로가기

Algorithm/BFS

(Python3) - LeetCode (Medium) : 515. Find Largest Value in Each Tree Row

반응형

https://leetcode.com/problems/find-largest-value-in-each-tree-row

level별 탐색하는 BFS 문제였습니다.

📕 풀이방법

📔 입력 및 초기화

1. 탐색을 진해할 deque변수 dq를 선언 후 root를 넣어줍니다. 

 

2. level별 최댓값을 반환할 max_values를 선언 후 빈 배열로 초기화해줍니다.

📔 풀이과정

dq에 원소가 존재하는 동안 while loop를 수행하며 다음을 진행합니다.1. 현 dq의 size를 구해줍니다. 이는 즉 자식의 node 개수를 의미합니다.

 

2. 각 자식들이 가지는 원소들을 비교해 최댓값을 저장할 변수 max_value를 선언해줍니다.

 

3. size만큼 for loop를 수행하며 자식 노드들의 원소를 비교하며 dq에서 popleft해줍니다.

 

4. for loop 수행후 현 level의 최댓값 max_value를 max_values에 append해줍니다.

📔 정답 출력 | 반환

max_values를 반환합니다.


📕 Code

📔 Python3

from collections import deque
# 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 []
        dq = deque([root])

        max_values = []
        while dq:
            size = len(dq)
            max_value = float('-inf')
            for i in range(size):
                node = dq.popleft()
                max_value = max(max_value,node.val)
                if node.left:
                    dq.append(node.left)
                if node.right:
                    dq.append(node.right)

            max_values.append(max_value)

        return max_values

*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.