MostFrequentSubtreeSum

Published at 2022-10-20

# 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 findFrequentTreeSum(self, root: Optional[TreeNode]) -> List[int]:
        # 문제: 가장 빈도수 많은 subtree 합계
        res = collections.defaultdict(int)
        
        def getSum(root, sums):
            if not root:
                return 0
            
            nowSum = getSum(root.left, sums)+getSum(root.right, sums)+root.val  # 왼+오+자신
            res[nowSum] += 1
            
            return nowSum

        getSum(root, 0)
        
        
        
        maxVal = max(res.values())
        return [s for s in res if res[s] == maxVal]