leetcode[Find Mode in Binary Search Tree]//待整理多种解法

来源:互联网 发布:java构造器小技巧 编辑:程序博客网 时间:2024/06/06 03:40

解法一:

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {private void recurse(TreeNode root, Map<Integer, Integer> map){if(root == null){return;}        //System.out.println(root.val);map.put(root.val, map.getOrDefault(root.val, 0) + 1);TreeNode left = root.left;TreeNode right = root.right;recurse(left,map);recurse(right,map);}    public int[] findMode(TreeNode root) {        //既然都是二分查找树了,说明中根遍历肯定是有序的了,可以利用这个来作文章    //现在先采用普通方法(适用于任意二叉树),来找出二叉树中出现次数最多的结点的值    //利用HashMap来统计树中结点的值的出现次数    HashMap<Integer,Integer> map = new HashMap<>();    recurse(root, map);        if(root == null){//空树单独处理,不是返回null,二十返回[]    return new int[0];    }        Iterator<Integer> it = map.values().iterator();        //因为空树已经单独处理了,此时it一定有元素    int mostFrequent = it.next();//找出二叉树中出现次数最多的结点的值的出现次数    while(it.hasNext()){    mostFrequent = Math.max(mostFrequent, it.next());    }            //System.out.println(mostFrequent);        List<Integer> resList = new ArrayList<>();    for(Map.Entry<Integer, Integer> entry : map.entrySet()){    if(entry.getValue() == mostFrequent){    resList.add(entry.getKey());//将最经常出现的结点的值统计到结果中    }    }        int[] res = new int[resList.size()];    for(int i = 0; i < resList.size(); i++){    res[i] = resList.get(i);    }        return res;    }}


阅读全文
0 0
原创粉丝点击