508. Most Frequent Subtree Sum
naive方法:递归 + map计数 + 全局变量 + list转array方法
int maxCount = 0;
HashMap<Integer, Integer> map = new HashMap<>();
public int[] findFrequentTreeSum(TreeNode root) {
subSum(root);
List<Integer> list = new ArrayList<>();
for (int key : map.keySet()) {
if ( map.get(key) == maxCount) {
list.add(key);
}
}
int[] res = new int[list.size()];
int j = 0;
for (int i : list) {
res[j++] = i;
}
return res;
}
private int subSum(TreeNode root) {
if (root == null) return 0;
int sum = root.val + subSum(root.left) + subSum(root.right);
map.put(sum, map.getOrDefault(sum, 0) + 1);
maxCount = Math.max(maxCount, map.get(sum));
return sum;
}