给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。
如果树中有不止一个众数,可以按 任意顺序 返回。
假定 BST 满足如下定义:
结点左子树中所含节点的值 小于等于 当前节点的值
结点右子树中所含节点的值 大于等于 当前节点的值
左子树和右子树都是二叉搜索树
示例 1:
输入:root = [1,null,2,2]
输出:[2]
示例 2:
输入:root = [0]
输出:[0]
class Solution { public: vectorres; 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(maxCount val); } pre=root; traverse(root->right); } };