2020年9月24日 二叉搜索树中的众数 findMode
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public int[] findMode(TreeNode root) {
}
}
解题思路:
题目中都提示我们使用递归来解决这个问题了,那肯定是选择递归了。
首先我们使用会用到额外空间的方式,计数法去实现,写一个额外的函数去递归二叉树,将所有数字出现的次数进行统计,然后输出出现次数最多的那些众数。
代码实现:使用最愚蠢也最简单的方式去实现。
HashMap<Integer,Integer> map=new HashMap<>();
public int[] findMode(TreeNode root) {
findmore(root);
int maxNum=0;
List<Integer> list = new ArrayList<>();
for (Integer integer : map.keySet()) {
if (map.get(integer) > maxNum){
maxNum = map.get(integer);
list = new ArrayList<>();
list.add(integer);
}else if (map.get(integer) == maxNum){
list.add(integer);
}
}
int[] res=new int[list.size()];
for (int i=0;i<list.size();i++) {
res[i]=list.get(i);
}
return res;
}
public void findmore(TreeNode root){
if (root==null)
return;
if (map.get(root.val)==null){
map.put(root.val,1 );
}
else
map.put(root.val,map.get(root.val)+1 );
findmore(root.right);
findmore(root.left);
}