1. 程式人生 > >[leetcode]508. Most Frequent Subtree Sum二叉樹中出現最多的值

[leetcode]508. Most Frequent Subtree Sum二叉樹中出現最多的值

def class keyset fault 二叉 post 節點 helper list

遍歷二叉樹,用map記錄sum出現的次數,每一個新的節點都統計一次。

遍歷完就統計map中出現最多的sum

Map<Integer,Integer> map = new HashMap<>();
    public int[] findFrequentTreeSum(TreeNode root) {
        helper(root);
        int max = 0;
        List<Integer> list  = new ArrayList<>();
        for (int key : map.keySet()) {
            
int v = map.get(key); if (v>max) { list.clear(); list.add(key); max = v; } else if (v==max) list.add(key); } int[] res = new int[list.size()]; for (int i = 0; i < res.length; i++) { res[i]
= list.get(i); } return res; } public int helper(TreeNode root) { if (root==null) return 0; int cur = root.val; cur+= helper(root.left); cur+=helper(root.right); map.put(cur,map.getOrDefault(cur,0)+1); return cur; }

[leetcode]508. Most Frequent Subtree Sum二叉樹中出現最多的值