题目:出现次数最多的子树元素和
class Solution {
HashMap<Integer,Integer> map = new HashMap<>();
public int sum(TreeNode root){
if (root == null)
return 0;
int leftSum = sum(root.left);
int rightSum = sum(root.right);
int totalSum = root.val + leftSum + rightSum;
if (map.containsKey(totalSum)){
map.put(totalSum,map.get(totalSum)+1);
}else {
map.put(totalSum,1);
}
return totalSum;
}
public int[] findFrequentTreeSum(TreeNode root) {
sum(root);
ArrayList<Integer> list = new ArrayList<>();
final int[] max = {Integer.MIN_VALUE};
map.forEach((key,value)->{
if (value == max[0]){
max[0] = value;
list.add(key);
}
if (value > max[0]){
max[0] = value;
list.clear();
list.add(key);
}
});
int[] ints = new int[list.size()];
for (int i = 0; i < list.size(); i++) {
ints[i] = list.get(i);
}
return ints;
}
}