508. Most Frequent Subtree Sum

naive方法:递归 + map计数 + 全局变量 + list转array方法

int maxCount = 0;
HashMap<Integer, Integer> map = new HashMap<>();

public int[] findFrequentTreeSum(TreeNode root) {
    subSum(root);
    List<Integer> list = new ArrayList<>();
    for (int key : map.keySet()) {
        if ( map.get(key) == maxCount) {
            list.add(key);
        }
    }
    int[] res = new int[list.size()];
    int j = 0;
    for (int i : list) {
        res[j++] = i;
    }
    return res;
}


private int subSum(TreeNode root) {
    if (root == null) return 0;
    int sum = root.val + subSum(root.left) + subSum(root.right);
    map.put(sum, map.getOrDefault(sum, 0) + 1);
    maxCount = Math.max(maxCount, map.get(sum));
    return sum;
}

results matching ""

    No results matching ""