Untitled

 avatar
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