题目描述
题目链接
https://leetcode.com/problems/most-frequent-subtree-sum/
方法思路
class Solution {
//Runtime: 7 ms, faster than 86.00%
//Memory Usage: 40.6 MB, less than 39.71%
//键值对的映射,取sum为key,frequency为value
Map<Integer, Integer> map;
int frequency;
public int[] findFrequentTreeSum(TreeNode root) {
map = new HashMap<>();
frequency = 1;
sum_Helper(root);
List<Integer> list = new LinkedList<>();
for(int x : map.keySet()){
if(map.get(x) == frequency)
list.add(x);
}
int[] ans = new int[list.size()];
int i = 0;
for(int x : list)
ans[i++] = x;
return ans;
}
public int sum_Helper(TreeNode root){
if(root == null) return 0;
int left = sum_Helper(root.left);
int right = sum_Helper(root.right);
int sum = root.val + left + right;
map.put(sum, map.getOrDefault(sum, 0) + 1);
if(frequency < map.get(sum))
frequency = map.get(sum);
return sum;
}
}