501. 二叉搜索树中的众数

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

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

假定 BST 满足如下定义:

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

示例 1:

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

示例 2:

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

提示:

  • 树中节点的数目在范围 [1, 104] 内
  • -105 <= Node.val <= 105

进阶:你可以不使用额外的空间吗?(假设由递归产生的隐式调用栈的开销不被计算在内)

采用双指针策略

class Solution {
private:
    int count = 0;
    int maxCount = 0;
    TreeNode *pre = NULL;
    vector<int> result;

    void searchBST(TreeNode *cur) {
        if (cur == nullptr) return;
        //    左
        searchBST(cur->left);
        //  中
        if (pre == nullptr) {
            count = 1;
        } else if (pre->val == cur->val) {
            count++;
        } else { // 与前一个节点数值不同
            count = 1;
        }
        //让pre为cur的前一个指针
        pre = cur;
        //此时为最大众数
        if (count == maxCount) {
            //则放入当前结点
            result.push_back(cur->val);
        }
        if (count > maxCount) { // 如果计数大于最大值频率
            maxCount = count;   // 更新最大频率
            result.clear();     // 很关键的一步,不要忘记清空result,之前result里的元素都失效了
            result.push_back(cur->val);
        }
        //右
        searchBST(cur->right);
        return;
    }

public:
    vector<int> findMode(TreeNode *root) {
        //先清空数组避免有冗余数据
        result.clear();
        searchBST(root);
        return result;
    }
};

相关推荐

  1. 力扣501

    2024-02-16 14:54:02       26 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-16 14:54:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-16 14:54:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-16 14:54:02       82 阅读
  4. Python语言-面向对象

    2024-02-16 14:54:02       91 阅读

热门阅读

  1. Redis 的 SETNX

    2024-02-16 14:54:02       47 阅读
  2. PointMixer论文阅读笔记

    2024-02-16 14:54:02       60 阅读
  3. Rust基础拾遗--并发和异步编程

    2024-02-16 14:54:02       47 阅读
  4. Vue路由的传参

    2024-02-16 14:54:02       51 阅读
  5. 正则表达式

    2024-02-16 14:54:02       57 阅读
  6. 02.03_111期_linux_gdb使用笔记

    2024-02-16 14:54:02       48 阅读
  7. ROS学习笔记14:Action通信

    2024-02-16 14:54:02       53 阅读
  8. 2301: 不定方程解的个数

    2024-02-16 14:54:02       51 阅读
  9. Go教程-Go语言简介

    2024-02-16 14:54:02       61 阅读
  10. 备战蓝桥杯 Day4

    2024-02-16 14:54:02       41 阅读