题目描述
Given the root of a binary tree, return the most frequent subtree sum. If there is a tie, return all the values with the highest frequency in any order.
The subtree sum of a node is defined as the sum of all the node values formed by the subtree rooted at that node (including the node itself).
解题思路
经典递归问题。
代码
# 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]:
self.d = {}
self.helper(root)
mx = max(self.d.values())
ans = []
for k in self.d.keys():
if self.d[k] == mx:
ans.append(k)
return ans
def helper(self, root):
if not root:
return 0
left_val = self.helper(root.left)
right_val = self.helper(root.right)
total = left_val + right_val + root.val
if total in self.d.keys():
self.d[total] += 1
else:
self.d[total] = 1
return total