[알고리즘] 가장 긴 동일 값의 경로

June·2021년 1월 25일
0

알고리즘

목록 보기
43/260

가장 긴 동일 값의 경로

책 풀이

class Solution:
    result: int = 0
    def longestUnivaluePath(self, root: TreeNode) -> int:
        def dfs(node: TreeNode):
            if node is None:
                return 0

            # 존재하지 않는 노드까지 DFS 재귀 탐색
            left  = dfs(node.left)
            right = dfs(node.right)

            # 현재 노드가 자식 노드와 동일한 경우 거리 1 증가
            if node.left and node.left.val == node.val:
                left += 1
            else:
                left = 0
            if node.right and node.right.val == node.val:
                right += 1
            else:
                right = 0

            self.result = max(self.result, left + right)
            return max(left, right)
        dfs(root)
        return self.result

이진 트리의 직경 문제와 비슷하다. 다만, 리프 노드까지 DFS로 탐색해 내려간 다음, 값이 일치할 경우 거리를 추가하고 아니면 0으로 만드는 방식을 택한다.

0개의 댓글