501. 二叉搜索树中的众数

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

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

假定 BST 满足如下定义:

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

示例 1:

501. 二叉搜索树中的众数_第1张图片

输入:root = [1,null,2,2]
输出:[2]

示例 2:

输入:root = [0]
输出:[0]

要不然也可以使用,直观思路。写一个map哈希,将次数值排序。然后把结果放入res中

要不然就是在过程中直接动态放入res中。

class Solution {
public:
    TreeNode* pre = nullptr;
    int count = 0;
    vectorres;
    int maxcount = INT32_MIN;
    void dfs(TreeNode* root){
        if(!root) return;
        dfs(root->left);

        if(!pre) count = 1;
        else if(pre->val == root->val) count++;
        else count = 1;
        pre = root;

        //如果某个数的次数也等于目前最大次数,说明也符合
        if(count == maxcount) res.push_back(root->val); 

        //如果比目前最大次数还大,那就更新最大次数,并且将之前存入res中的值,清空
        if(count > maxcount){
            maxcount = count;
            res.clear();
            res.push_back(root->val);
        }
        dfs(root->right);
    }
    vector findMode(TreeNode* root) {
        //中序
        dfs(root);
        return res;
    }
};

 

你可能感兴趣的:(leetcode练习,算法,数据结构,c++)