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二叉搜索树中的众数的主要内容,如果未能解决你的问题,请参考以下文章