leetcode508实现在 本地IDE 定义二叉树 运行
package com.javamvc.learning.leetcode;
import java.util.HashMap;
import java.util.Map;
import com.javamvc.learning.leetcode.leetCode508.TreeNode.Solution;
public class leetCode508 {
public static void main(String[] args) {
TreeNode root = new TreeNode(5);
TreeNode left1 = new TreeNode(2);
TreeNode right1 = new TreeNode(-3);
// 创建一棵树
root.left = left1;
root.right = right1;
leetCode508 leetCode508 = new leetCode508();
Solution solution = new Solution();
int[] findFrequentTreeSum = solution.findFrequentTreeSum(root);
for (int i : findFrequentTreeSum) {
System.out.println(i);
}
}
static class TreeNode {
TreeNode left;
TreeNode right;
int val;
TreeNode(int val) {
this.val = val;
}
static class Solution {
private Map<Integer, Integer> map = new HashMap<>();
private int degree = 0;
private int size = 0;
public int[] findFrequentTreeSum(TreeNode root) {
findSum(root);
int[] res = new int[size];
int i = 0;
for (int n : map.keySet()) {
if (map.get(n) == degree) {
res[i++] = n;
}
}
return res;
}
public int findSum(TreeNode node) {
// when node == null, the sum = 0
if (node == null) {
return 0;
}
int left = findSum(node.left);
int right = findSum(node.right);
int sum = left + right + node.val;
map.put(sum, map.getOrDefault(sum, 0) + 1);
if (map.get(sum) > degree) {
degree = map.get(sum);
size = 1;
} else if (map.get(sum) == degree) {
size++;
}
return sum;
}
}
}}