一、题目
在这里插入图片描述
二、代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution
{
Map<Integer, Integer> map = new HashMap<>();
public void search_tree(TreeNode pro)
{
if(pro.left!= null) search_tree(pro.left) ;
// System.out.println("pro.val " + pro.val);
map.put(pro.val,map.getOrDefault(pro.val,0)+1);
if(pro.right!= null) search_tree(pro.right) ;
}
public int[] findMode(TreeNode root)
{
if (root == null) return new int[1];
search_tree(root);
int max_index = 0;
int max_length = 0;
int max =0;
for(var x:map.entrySet())
{
if(x.getValue() >=max )
{
if(x.getValue() > max ) max_length = 0;
max = x.getValue();
max_length = max_length+1;
}
// System.out.println("分割 " );
// System.out.println("map.key " + x.getKey());
// System.out.println("map.val " + x.getValue());
}
int[] num = new int[max_length];
int index = 0;
for(var x:map.entrySet())
{
if(x.getValue() == max)
{
num[index++] = x.getKey();
}
}
return num;
}
}
三、运行结果
四、附录
二刷
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution
{
List<Integer> record = new LinkedList<>();
public void track(TreeNode pro)
{
if(pro==null) return;
if(pro.left!=null) track(pro.left);
record.add(pro.val);
if(pro.right!=null) track(pro.right);
}
public int[] findMode(TreeNode root)
{
track(root);
int i;
int length = record.size();
// System.out.println(" length "+length);
// for(i=0;i<length;i++) System.out.println(" "+record.get(i));
int max_count = -1 ;
int num = Integer.MAX_VALUE;
List<Integer> max_num = new LinkedList<>();
int temp_count=0;
for(i=0;i<length;i++)
{
if(record.get(i)!=num )
{
temp_count = 0;
num = record.get(i);
}
if(record.get(i)==num)
{
temp_count++;
if(temp_count==max_count)
{
// System.out.println(" add "+num);
max_num.add(num);
}
if(temp_count>max_count)
{
while(max_num.size()!=0)
{
// System.out.println(" temp_count "+temp_count);
// System.out.println(" max_count "+max_count);
// System.out.println(" remove "+max_num.get(max_num.size()-1));
max_num.removeLast();
}
max_num.add(num);
max_count = temp_count;
}
}
}
int[] re = new int[max_num.size()];
length = max_num.size();
for(i=0;i<length;i++) re[i] = max_num.get(i);
return re;
}
}