Leetcode 508. Most Frequent Subtree Sum
Last updated
Last updated
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
int maxCount = 0;
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
LinkedList<Integer> arr = new LinkedList<Integer>();
public int[] findFrequentTreeSum(TreeNode root) {
treeSum(root);
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
// get all sums that has maxCount
if (entry.getValue() == maxCount) {
arr.add(entry.getKey());
}
}
// return the result as an int array
int[] res = new int[arr.size()];
for (int i = 0; i < arr.size(); i++) {
res[i] = arr.get(i);
}
return res;
}
// find the sum of given subtree
private int treeSum(TreeNode node) {
if (node == null) return 0;
int s = treeSum(node.left) + treeSum(node.right) + node.val;
int freq = map.getOrDefault(s, 0) + 1; // update (sum, count) pair
map.put(s, freq);
maxCount = Math.max(maxCount, freq); // update current max
return s;
}
}