508. 出现次数最多的子树元素和

exiaohu 于 2022-06-19 发布

题目链接:508. 出现次数最多的子树元素和

计算每一个子树元素和,然后找到最多的那个。

# 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: TreeNode) -> List[int]:
        anses = []

        def do_sum(node: TreeNode) -> int:
            if node is None:
                return 0

            ans = node.val + do_sum(node.left) + do_sum(node.right)
            anses.append(ans)
            return ans

        do_sum(root)

        ret, max_cnt = [], float('-inf')
        for val, cnt in Counter(anses).items():
            if cnt > max_cnt:
                ret = [val]
                max_cnt = cnt
            elif cnt == max_cnt:
                ret.append(val)
        return ret