力扣刷题记录 -- JAVA--57---501. 二叉搜索树中的众数


一、题目

在这里插入图片描述

在这里插入图片描述

二、代码

/**
 * 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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@白圭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值