501 . 二叉搜索树中的众数
题目:给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。
假定 BST 有如下定义:
结点左子树中所含结点的值小于等于当前结点的值
结点右子树中所含结点的值大于等于当前结点的值
左子树和右子树都是二叉搜索树
例如:
给定 BST [1,null,2,2],
1
2
/
2
返回[2].
class Solution {
private:
int count;//统计当前二叉树中的众数
int max_count;//统计当前二叉树众数的最大值
vector<int> result;//存放众数的结果
TreeNode * pre;
void BSTsearch(TreeNode* cur)
{
if(cur == NULL) return;
//左
BSTsearch(cur->left);
//中
//pre为空,说明是第一个节点,count为1
if(pre == NULL) count = 1;
//当前节点和前一个节点值相同时,count累加
else if(pre->val == cur->val) count++;
//与前一个节点数值不同
else count = 1;
//更新pre
pre = cur;
//相同时,存入数组
if(count == max_count) result.push_back(cur->val);
//当前结果大于最大值
if(count > max_count)
{
//更新最大值
max_count = count;
//清空数组
result.clear();
//将新的结果存入
result.push_back(cur->val);
}
//右
BSTsearch(cur->right);
return;
}
public:
vector<int> findMode(TreeNode* root) {
int count = 0;
int max_count = 0;
TreeNode * pre = NULL;
BSTsearch(root);
return result;
}
};