포스트

Average of Levels in Binary Tree

LeetCode 637. Average of Levels in Binary Tree

원문

Given the root of a binary tree, return the average value of the nodes on each level in the form of an array. Answers within 10-5 of the actual answer will be accepted.

풀이

BFS로 탐색하며 각 레벨에 들어가는 값끼리 같은 배열에 들어가게 한다.
탐색이 끝난 후 레벨 별로 값을 모아놓은 배열에서 평균을 구한다.

방문처리: 파이썬의 경우 hasattr 함수를 사용하면 클래스 인스턴스에 속성이 있는지를 판별할 수 있다.

코드

Python

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
from collections import deque
from statistics import mean


class Solution:
    def averageOfLevels(self, root: Optional[TreeNode]) -> List[float]:
        que = deque([(root, 0)])
        total = [[root.val]]
        root.visited = True

        while que:
            now, depth = que.popleft()

            if now.left and not hasattr(now.left, 'visited'):
                now.left.visited = True
                que.append((now.left, depth + 1))

                if len(total) == depth + 1:
                    total.append([now.left.val])
                else:
                    total[depth + 1].append(now.left.val)

            if now.right and not hasattr(now.right, 'visited'):
                now.right.visited = True
                que.append((now.right, depth + 1))

                if len(total) == depth + 1:
                    total.append([now.right.val])
                else:
                    total[depth + 1].append(now.right.val)


        result = [0.0 for i in range(len(total))]

        for i in range(len(total)):
            result[i] = mean(total[i])

        return result
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.