给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。
如果树中有不止一个众数,可以按 任意顺序 返回。
假定 BST 满足如下定义:
结点左子树中所含节点的值 小于等于 当前节点的值
结点右子树中所含节点的值 大于等于 当前节点的值
左子树和右子树都是二叉搜索树
代码
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;}
};