Algorithms/LeetCode

LeetCode #1339 Maximum Product of Splitted Binary Tree

8iggy 2021. 8. 24. 23:51

읽기 전

  • 불필요한 코드나 잘못 작성된 내용에 대한 지적은 언제나 환영합니다.
  • 개인적으로 배운 점을 정리한 글입니다.

문제 링크

LeetCode #1339 Maximum Product of Splitted Binary Tree

문제 풀이

dfs를 한 번 수행하여 전체 합을 수하게 만들고 중간 리턴 시 자기 포함 하단 노드들의 합을 반환하여 이후 2번째 dfs에서 앞서 구한 전체합과 비교하게 한다.

  • 클래스 변수와 전체 합을 0으로 선언
  • dfs 함수를 정의한다. 좌, 우측의 sub_tree합을 구하고 양쪽의 결과 비교하여 최대값을 클래스 변수에 저장한다.
  • 리턴은 자신 포함 양쪽 sub_tree 합을 더한 값을 리턴하여 전체 합이 마지막으로 반환되게 설정
  • 첫 dfs는 전체 합을 구하게끔 탐색
  • 두 번째 dfs에서 전체 합이 설정되어 클래스 변수 값이 설정됨
  • 제약 조건에 따라 나머지 연산 후 반환

python 코드

class Solution:
    def maxProduct(self, root: Optional[TreeNode]) -> int:
        MOD = 10 ** 9 + 7
        self.res = total = 0
        def dfs(node):
            if node is None:
                return 0
            left, right = dfs(node.left), dfs(node.right)
            self.res = max(self.res, left * (total - left), right * (total - right))
            return left + right + node.val
        total = dfs(root)
        dfs(root)
        return self.res % MOD