501. 二叉搜索树中的众数
题目描述
给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。
如果树中有不止一个众数,可以按 任意顺序 返回。
假定 BST 满足如下定义:
结点左子树中所含节点的值 小于等于 当前节点的值 结点右子树中所含节点的值 大于等于 当前节点的值 左子树和右子树都是二叉搜索树
解题思路
对我来说有点难了
class Solution {
public:
TreeNode*pre=0;
int cnt=0;
int maxcnt=0;
vector<int>res;
void f(TreeNode*p){
if(!p)return;
f(p->left);
if(!pre)cnt=1;else{
if(p->val==pre->val)cnt ++;
else cnt=1;
}
if (cnt>maxcnt){
maxcnt=cnt;res.clear();res.push_back(p->val);
} else if (cnt==maxcnt){
res.push_back(p->val);
}
pre=p;
f(p->right);
}
vector<int> findMode(TreeNode*r) {
res.clear();
f(r);
return res;
}
};