Most Frequent Subtree Sum
Last updated
Last updated
class Solution {
private int freq;
public int[] findFrequentTreeSum(TreeNode root) {
Map<Integer, Integer> map = new HashMap<>();
dfs(root, map);
List<Integer> res = new ArrayList<>();
for (Map.Entry<Integer, Integer> e : map.entrySet()) {
if (freq == e.getValue()) {
res.add(e.getKey());
}
}
int[] ans = new int[res.size()];
int i = 0;
for (int elem : res) {
ans[i] = res.get(i);
i++;
}
return ans;
}
private int dfs(TreeNode root, Map<Integer, Integer> map) {
if (root == null) return 0;
int sum = root.val + dfs(root.left, map) + dfs(root.right, map);
map.put(sum, map.getOrDefault(sum, 0) + 1);
freq = Math.max(freq, map.get(sum));
return sum;
}
}