1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| class Solution { public int[] findFrequentTreeSum(TreeNode root) { Map<Integer, Integer> sumToCountMap = new HashMap<>(); dfs(sumToCountMap, root);
List<Integer> sumList = new ArrayList<>(); int maxCount = 0; for (Map.Entry<Integer, Integer> entry : sumToCountMap.entrySet()) { int sum = entry.getKey(), count = entry.getValue(); if (count > maxCount) { maxCount = count; sumList.clear(); sumList.add(sum); } else if (count == maxCount) { sumList.add(sum); } }
int[] res = new int[sumList.size()]; for (int i = 0; i < res.length; i++) { res[i] = sumList.get(i); } return res; }
private int dfs(Map<Integer, Integer> sumToCountMap, TreeNode node) { if (node == null) { return 0; }
int left = dfs(sumToCountMap, node.left); int right = dfs(sumToCountMap, node.right);
int sum = left + node.val + right; sumToCountMap.put(sum, sumToCountMap.getOrDefault(sum, 0) + 1); return sum; } }
|
References
508. Most Frequent Subtree Sum