树_二叉搜索树的众树

在这里插入图片描述

//给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。 
//
// 如果树中有不止一个众数,可以按 任意顺序 返回。 
//
// 假定 BST 满足如下定义: 
//
// 
// 结点左子树中所含节点的值 小于等于 当前节点的值 
// 结点右子树中所含节点的值 大于等于 当前节点的值 
// 左子树和右子树都是二叉搜索树 
// 
//
// 
//
// 示例 1: 
// 
// 
//输入:root = [1,null,2,2]
//输出:[2]
// 
//
// 示例 2: 
//
// 
//输入:root = [0]
//输出:[0]
// 
//
// 
//
// 提示: 
//
// 
// 树中节点的数目在范围 [1, 10⁴] 内 
// -10⁵ <= Node.val <= 10⁵ 
// 
//
// 
//
// 进阶:你可以不使用额外的空间吗?(假设由递归产生的隐式调用栈的开销不被计算在内) 
//
// Related Topics 树 深度优先搜索 二叉搜索树 二叉树 👍 717 👎 0


//leetcode submit region begin(Prohibit modification and deletion)

import java.util.ArrayList;

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 * int val;
 * TreeNode left;
 * TreeNode right;
 * TreeNode() {}
 * TreeNode(int val) { this.val = val; }
 * TreeNode(int val, TreeNode left, TreeNode right) {
 * this.val = val;
 * this.left = left;
 * this.right = right;
 * }
 * }
 */
class Solution {
   
    /**
     * 记录结果的链表
     */
    List<Integer> res = new ArrayList<>();

    /**
     * 记录单个数的频次
     */
    int count = 0;

    /**
     * 记录历史最高频次
     */
    int maxCount = 0;

    /**
     * 记录当前值
     *
     * @param root
     * @return
     */
    int recordValue = Integer.MIN_VALUE;

    public int[] findMode(TreeNode root) {
   
        findValue(root);

        return res.stream().mapToInt(Integer::intValue).toArray();
    }

    /**
     * 寻找的过程中,若发现比当前最多频次的值大的内容,则替换为频次更高的那个值,替换前清空
     * res;若频次等于当前值,则新增一个记录;若频次小于当前值,则不做任何处理就跳过它
     *
     * @param cur
     */
    private void findValue(TreeNode cur) {
   
        if (cur == null) {
   
            return;
        }

        findValue(cur.left);
        //重置计数,每当出现新的值时
        if (cur.val != recordValue) {
   
            recordValue = cur.val;
            count = 0;
        }
        count++;
        /*
        当前值大于历史值,则以当前值的频次,作为最高频次;
        当前值等于历史值,则将当前值添加到结果记录中,作为
        出现频次最高的数之一
         */
        if (count > maxCount) {
   
            res.clear();
            res.add(recordValue);
            maxCount = count;
        } else if (count == maxCount) {
   
            res.add(recordValue);
        }
        findValue(cur.right);
    }
}
//leetcode submit region end(Prohibit modification and deletion)

相关推荐

最近更新

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

    2023-12-06 13:08:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-06 13:08:03       101 阅读
  3. 在Django里面运行非项目文件

    2023-12-06 13:08:03       82 阅读
  4. Python语言-面向对象

    2023-12-06 13:08:03       91 阅读

热门阅读

  1. Redis远程字典服务

    2023-12-06 13:08:03       58 阅读
  2. OpenHarmony 4.0 Release 编译及报错

    2023-12-06 13:08:03       45 阅读
  3. python文件docx转pdf

    2023-12-06 13:08:03       58 阅读
  4. 高防CDN技术的崛起与网络安全的演进

    2023-12-06 13:08:03       60 阅读
  5. 基于eBPF检测非法调试行为

    2023-12-06 13:08:03       49 阅读
  6. Spring Boot Actuator的常见Endpoint

    2023-12-06 13:08:03       48 阅读
  7. git如何配置多个远程仓库,并且进行切换

    2023-12-06 13:08:03       58 阅读
  8. MQTT保留消息与遗嘱消息理解和应用

    2023-12-06 13:08:03       62 阅读