前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >leetcode508. Most Frequent Subtree Sum

leetcode508. Most Frequent Subtree Sum

作者头像
眯眯眼的猫头鹰
发布2019-11-15 17:08:20
3480
发布2019-11-15 17:08:20
举报

题目要求

Given the root of a tree, you are asked to find the most frequent subtree sum. The subtree sum of a node is defined as the sum of all the node values formed by the subtree rooted at that node (including the node itself). So what is the most frequent subtree sum value? If there is a tie, return all the values with the highest frequency in any order.

Examples 1 Input:

代码语言:javascript
复制
  5
 /  \
2   -3

return [2, -3, 4], since all the values happen only once, return all of them in any order.

Examples 2 Input:

代码语言:javascript
复制
   5
 /  \
2   -5

return [2], since 2 happens twice, however -5 only occur once. Note: You may assume the sum of values in any subtree is in the range of 32-bit signed integer.

现在有一棵树,要求计算每一个节点和该节点下所有自节点的值的和,并且找出出现次数最多的子树和。如果出现多个节点均出现最多次,则将这些节点都返回。

思路和代码

这题的核心思路在于利用后序遍历,先递归的计算出左子树和右子树的子树和,再将计算出当前的节点的子树和,并递归的统计每个子树和出现的次数,以及最大的子树和值。最后遍历所有统计,将统计结果等于最大子树和的子树和取出并返回。

代码语言:javascript
复制
    private int maxCount;
    Map<Integer, Integer> count = new HashMap<>();
    public int[] findFrequentTreeSum(TreeNode root) {
        calculateTreeSum(root);
        List<Integer> result = new ArrayList<>();
        for (Integer key : count.keySet()) {
            Integer value = count.get(key);
            if (value == maxCount) {
                result.add(key);
            }
        }
        return result.stream().mapToInt(Integer::intValue).toArray();
    }

    public int calculateTreeSum(TreeNode sum) {
        if (sum == null) return 0;
        int left = calculateTreeSum(sum.left);
        int right = calculateTreeSum(sum.right);
        int mid = left + right + sum.val;
        count.merge(mid, 1, Integer::sum);
        maxCount = Math.max(maxCount, count.get(mid));
        return mid;
    }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目要求
  • 思路和代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档