501. 二叉搜索树中的众数
给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。
如果树中有不止一个众数,可以按 任意顺序 返回。
假定 BST 满足如下定义:
结点左子树中所含节点的值 小于等于 当前节点的值
结点右子树中所含节点的值 大于等于 当前节点的值
左子树和右子树都是二叉搜索树
class Solution {
public:
void inorder(TreeNode* root){
if(root == nullptr) return;
mp[root->val]++;
inorder(root->left);
inorder(root->right);
}
vector<int> findMode(TreeNode* root) {
inorder(root);
vector<std::pair<int, int>> vec;
for (const auto& item : mp)
{
vec.emplace_back(item);
}
std::sort(vec.begin(),vec.end(),
[](const auto &a,const auto &b)->bool{ return a.second>b.second;});
vector<int> res;
int k = vec[0].second;
for(const auto &x:vec){
if(x.second == k) res.emplace_back(x.first);
}
return res;
}
void inorder_t(TreeNode* root){
if(root == nullptr) return;
inorder_t(root->left);
if(pre == nullptr){
count = 1;
}
else if(pre->val == root->val){
count++;
}
else{
count = 1;
}
pre = root;
if(count == max){
res.emplace_back(root->val);
}
if(count > max){
res.clear();
res.emplace_back(root->val);
max = count;
}
inorder_t(root->right);
}
vector<int> findMode(TreeNode* root){
count = 0;
max = 0;
this->pre = nullptr;
res.clear();
inorder_t(root);
return res;
}
private:
std::unordered_map<int,int> mp;
int count;
int max;
TreeNode* pre;
vector<int> res;
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理