Leetcode 508. Most Frequent Subtree Sum
Given the root of a binary tree, return the most frequent subtree sum. If there is a tie, return all the values with the highest frequency in any order.
The subtree sum of a node is the sum of all the node values formed by the subtree rooted at that node (including the node itself).
import java.util.*;
public class Solution {
private Map<Integer, Integer> sumFrequency;
private int maxFrequency;
public int[] findFrequentTreeSum(TreeNode root) {
sumFrequency = new HashMap<>();
maxFrequency = 0;
postOrderTraversal(root);
List<Integer> mostFrequentSums = new ArrayList<>();
for (Map.Entry<Integer, Integer> entry : sumFrequency.entrySet()) {
if (entry.getValue() == maxFrequency) {
mostFrequentSums.add(entry.getKey());
}
}
return mostFrequentSums.stream().mapToInt(i -> i).toArray();
}
private int postOrderTraversal(TreeNode node) {
if (node == null) {
return 0;
}
int leftSum = postOrderTraversal(node.left);
int rightSum = postOrderTraversal(node.right);
int totalSum = node.val + leftSum + rightSum;
sumFrequency.put(totalSum, sumFrequency.getOrDefault(totalSum, 0) + 1);
maxFrequency = Math.max(maxFrequency, sumFrequency.get(totalSum));
return totalSum;
}
}
Got blindsided by a question you didn’t expect?
Spend too much time studying?
Or simply don’t have the time to go over all 3000 questions?