给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。
如果树中有不止一个众数,可以按 任意顺序 返回。
假定 BST 满足如下定义:
结点左子树中所含节点的值 小于等于 当前节点的值
结点右子树中所含节点的值 大于等于 当前节点的值
左子树和右子树都是二叉搜索树
示例 1:
输入:root = [1,null,2,2]
输出:[2]
示例 2:
输入:root = [0]
输出:[0]
class Solution {
public:
vector res;
TreeNode* pre=nullptr;
int count=0;
int maxCount=0;
vector findMode(TreeNode* root)
{
traverse(root);
return res;
}
void traverse(TreeNode* root)
{
if(root==nullptr)
return ;
traverse(root->left);
if(pre!=nullptr)
{
if(pre->val==root->val)//与前一个结点数值相同
{
count++;
}
else//与前一个结点数值不同
{
count=0;
}
}
//如果count等于最大频率,说明是另一个众数,加到结果数组里
if(maxCount==count)
{
res.push_back(root->val);
}
//如果count大于最大频率,说明最大频率要变了,之前的结果数组要清空,把新的众数加进去
if(maxCountval);
}
pre=root;
traverse(root->right);
}
};



