• Java实现 LeetCode 508 出现次数最多的子树元素和


    508. 出现次数最多的子树元素和

    给出二叉树的根,找出出现次数最多的子树元素和。一个结点的子树元素和定义为以该结点为根的二叉树上所有结点的元素之和(包括结点本身)。然后求出出现次数最多的子树元素和。如果有多个元素出现的次数相同,返回所有出现次数最多的元素(不限顺序)。

    示例 1
    输入:

      5
     /  
    2   -3
    

    返回 [2, -3, 4],所有的值均只出现一次,以任意顺序返回所有值。

    示例 2
    输入:

      5
     /  
    2   -5
    

    返回 [2],只有 2 出现两次,-5 只出现 1 次。

    提示: 假设任意子树元素和均可以用 32 位有符号整数表示。

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
         private int max = 0;
        public int[] findFrequentTreeSum(TreeNode root) {
            if(root == null) return new int[0];
            Map<Integer,Integer> map = new HashMap<>();
            helper(root,map);
            //然后求出map中value最大值对应的Key
            List<Integer> res = new LinkedList<>();
            for(Integer i : map.keySet()){
                if(map.get(i) == max)
                    res.add(i);
            }
            int[] resArr = new int[res.size()];
            for(int i = 0;i < res.size();i++){
                resArr[i] = res.get(i);
            }
            return resArr;
        }
        
        private int helper(TreeNode root,Map<Integer,Integer> map){
            if(root == null) return 0;
            //求出当前节点为根的元素和
            int left = helper(root.left,map);
            int right = helper(root.right,map);
            int val = left+right+root.val;
            map.put(val,map.getOrDefault(val,0)+1);
            max = Math.max(max,map.get(val));
            return val;    
        }
    }
    
  • 相关阅读:
    stax(和dom4j功能一样,这个是基于流的一种处理方式)
    JAXB(xml和对象的转换)
    wsdl理解
    webservice心得
    ZT 分智网博客 – 职场、面试技巧、职业规划
    discern concern fifth sixth
    ZT I Believe I Can Fly(我相信我能飞)
    ZT 理解class.forName()
    ZT 第9章 Framework的启动过程
    android 智能指针的学习先看邓凡平的书扫盲 再看前面两片博客提升
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13074991.html
Copyright © 2020-2023  润新知