Untitled
unknown
plain_text
a month ago
1.9 kB
1
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