leetcode 501. 二叉搜索树中的众数
一、题目
给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。
如果树中有不止一个众数,可以按 任意顺序 返回。
假定 BST 满足如下定义:
结点左子树中所含节点的值 小于等于 当前节点的值
结点右子树中所含节点的值 大于等于 当前节点的值
左子树和右子树都是二叉搜索树
输入:root = [1,null,2,2]
输出:[2]
二、解法
中序遍历。
class Solution {
List<Integer> list=new LinkedList<>();
Integer prev,cnt,maxCnt=1;
public int[] findMode(TreeNode root) {
dfs(root);
int[] ans=new int[list.size()];
for(int i=0;i<list.size();i++) ans[i]=list.get(i);
return ans;
}
void dfs(TreeNode root){
if(root==null) return;
dfs(root.left);
if(prev!=null&&prev==root.val){
cnt++;
}else{
prev=root.val;
cnt=1;
}
if(cnt==maxCnt){
list.add(prev);
}else if(cnt>maxCnt){
list.clear();
list.add(prev);
maxCnt=cnt;
}
dfs(root.right);
}
}

浙公网安备 33010602011771号