给你一个二叉树的根结点 root ,请返回出现次数最多的子树元素和。如果有多个元素出现的次数相同,返回所有出现次数最多的子树元素和(不限顺序)。
一个结点的 「子树元素和」 定义为以该结点为根的二叉树上所有结点的元素之和(包括结点本身)。
示例
输入: root = [5,2,-3]
输出: [2,-3,4]
输入: root = [5,2,-5]
输出: [2]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/most-frequent-subtree-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution { ListJava实现2res = new ArrayList<>(); public int[] findFrequentTreeSum(TreeNode root) { if (root == null) return new int[]{}; pd(root); Map map = new HashMap<>(); int flag = 1; for (int i = 0; i < res.size(); i++) { int a = res.get(i); if (!map.containsKey(a)) { map.put(a, 1); } else { map.put(a, map.get(a) + 1); if (map.get(a) > flag) flag = map.get(a); } } List o1 = new ArrayList<>(); for (int key : map.keySet()) { if (map.get(key) == flag) o1.add(key); } int[] out = new int[o1.size()]; for (int i = 0; i < o1.size(); i++) out[i] = o1.get(i); return out; } public void pd(TreeNode root) { if (root == null) return; res.add(traverse(root)); pd(root.left); pd(root.right); } public int traverse(TreeNode root){ if (root == null) return 0; return root.val + traverse(root.left) + traverse(root.right); } }
在1的基础上改进
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)