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

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개의 댓글

관련 채용 정보