Most Frequent Subtree Sum
Thoughts
Code
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
Map<Integer, Integer> sums = new HashMap<>();
private int sum(TreeNode node) {
if (node == null) {
return 0;
}
int leftSum = sum(node.left);
int rightSum = sum(node.right);
int sum = leftSum + rightSum + node.val;
if (!sums.keySet().contains(sum)) {
sums.put(sum, 1);
} else {
sums.put(sum, sums.get(sum) + 1);
}
return sum;
}
public int[] findFrequentTreeSum(TreeNode root) {
List<Integer> res = new ArrayList<>();
sum(root);
int maxFreq = 0;
for (Integer subsum : sums.keySet()) {
int freq = sums.get(subsum);
if (freq > maxFreq) {
res.clear();
maxFreq = freq;
}
if (freq == maxFreq) {
res.add(subsum);
}
}
int[] results = new int[res.size()];
for (int i = 0; i < results.length; i++) {
results[i] = res.get(i);
}
return results;
}
}Analysis
Ver.2
Last updated