501. 二叉搜索树中的众数

题目描述

给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。

如果树中有不止一个众数,可以按 任意顺序 返回。

假定 BST 满足如下定义:

结点左子树中所含节点的值 小于等于 当前节点的值 结点右子树中所含节点的值 大于等于 当前节点的值 左子树和右子树都是二叉搜索树

解题思路

对我来说有点难了

class Solution {
public:
TreeNode*pre=0;
int cnt=0;
int maxcnt=0;
vector<int>res;
void f(TreeNode*p){
    if(!p)return;
    f(p->left);
    if(!pre)cnt=1;else{
        if(p->val==pre->val)cnt ++;
        else cnt=1;
    }
    if (cnt>maxcnt){
        maxcnt=cnt;res.clear();res.push_back(p->val);
    } else if (cnt==maxcnt){
        res.push_back(p->val);
    }
    pre=p;
    f(p->right);
}
    vector<int> findMode(TreeNode*r) {
        res.clear();
f(r);
return res;
    }
};

学习感想