leetcode简单501二叉搜索树中的众数

Posted qq_40707462

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode简单501二叉搜索树中的众数相关的知识,希望对你有一定的参考价值。


思路:
正常来说,中序遍历得到非递减数组,然后求数组众数即可,但消耗额外空间;

已知遍历顺序肯定是非递减,如果有相同的数肯定连在一起,可以在遍历途中维护一个表示当前数字出现几次的count,当前出现最对的次数maxCount,和记录前一个节点pre

  • cur==pre; count++;
  • 否则,清空count
  • 如果count>maxCount,清空res,重新开始记录
class Solution {
    List<Integer>res=new ArrayList<>();
    TreeNode pre=null;
    int count=0;
    int maxCount=0;
    public int[] findMode(TreeNode root) {
        find(root);
        return res.stream().mapToInt(Integer::intValue).toArray();
    }
    public void find(TreeNode root){
        if(root==null) return;

        find(root.left);

        int cur=root.val;
        //计数
        if(pre==null || root.val!=pre.val) count=1;//重新开始计数
        else count++;
        //检查是否max
        if(count==maxCount){
            res.add(root.val);
        }else if(count>maxCount){
            res.clear();
            res.add(root.val);
            maxCount=count;
        }
        pre=root;

        find(root.right);
    }
}

以上是关于leetcode简单501二叉搜索树中的众数的主要内容,如果未能解决你的问题,请参考以下文章

二叉树二叉搜索树中的众数(leetcode501)

二叉树二叉搜索树中的众数(leetcode501)

LeetCode 501. 二叉搜索树中的众数

501. 二叉搜索树中的众数

501-二叉搜索树中的众数

501. 二叉搜索树中的众数