Untitled
unknown
plain_text
10 months ago
1.9 kB
4
Indexable
import java.util.*;
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {}
TreeNode(int val) { this.val = val; }
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
public class Solution {
public int[] findFrequentTreeSum(TreeNode root) {
if (root == null) return new int[0];
// Map to store subtree sums and their frequencies
Map<Integer, Integer> sumFrequency = new HashMap<>();
// Calculate subtree sums
calculateSubtreeSums(root, sumFrequency);
// Find the maximum frequency
int maxFrequency = 0;
for (int freq : sumFrequency.values()) {
maxFrequency = Math.max(maxFrequency, freq);
}
// Collect all sums with the maximum frequency
List<Integer> result = new ArrayList<>();
for (Map.Entry<Integer, Integer> entry : sumFrequency.entrySet()) {
if (entry.getValue() == maxFrequency) {
result.add(entry.getKey());
}
}
// Convert the result list to an array
return result.stream().mapToInt(i -> i).toArray();
}
private int calculateSubtreeSums(TreeNode node, Map<Integer, Integer> sumFrequency) {
if (node == null) return 0;
// Calculate the sum of left and right subtrees
int leftSum = calculateSubtreeSums(node.left, sumFrequency);
int rightSum = calculateSubtreeSums(node.right, sumFrequency);
// Calculate the total subtree sum for the current node
int subtreeSum = leftSum + rightSum + node.val;
// Update the frequency map
sumFrequency.put(subtreeSum, sumFrequency.getOrDefault(subtreeSum, 0) + 1);
return subtreeSum;
}
}
Editor is loading...
Leave a Comment