给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。
如果树中有不止一个众数,可以按 任意顺序 返回。
假定 BST 满足如下定义:
结点左子树中所含节点的值 小于等于 当前节点的值
结点右子树中所含节点的值 大于等于 当前节点的值
左子树和右子树都是二叉搜索树
代码
cpp
class Solution {
public:
int count=0, maxCount=0;
TreeNode* pre=nullptr;
vector<int> res;
void traversal(TreeNode* node) {
if (node == nullptr) return;
traversal(node->left);
if (pre == nullptr) count = 1;
else if (pre->val == node->val) ++count;
else count = 1;
pre = node;
if (count == maxCount) {
res.push_back(node->val);
}
//如果res中没有元素或者已存在相同的元素,就不用在重复clear和push_back。
else if (count > maxCount) {
maxCount = count;
res = { node->val };
}
traversal(node->right);
}
vector<int> findMode(TreeNode* root) {
traversal(root);
return res;
}
};