LeetCode算法题-Find Mode in Binary Search Tree(Java实现)

lammps教程:实例讲解npt、nvt系综的选择 对于lammps新手来说,系综的选择令人困惑,到底是应该用nvt系综还是npt系综? 我在初学lammps时就被这个问题困扰了很久。如果去问别人,可能会告诉你一个答案:根据模拟需要确定。 其实和没说一样。 到底如何确定系综,确实不是一句两句能够说清楚的,不同的体系、不同的模拟目的要选择不同的系综。 前几天遇到的一个合金的模拟案例,比较有代表性,分享出来供大家参考。 建模方法和之前介绍过的高熵合金建模方法类似,先建立单晶模型,然后使用替换原子的命令获得合金结构。 建模完成后,按照常规,先上nvt系综进行驰豫 阅读详情

这是悦乐书的第246次更新,第259篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第113题(顺位题号是501)。给定具有重复项的二叉搜索树(BST),找到给定BST中的所有模式(最常出现的元素)。假设BST定义如下:

节点的左子树仅包含键小于或等于节点键的节点。

节点的右子树仅包含键大于或等于节点键的节点。

左右子树也必须是二叉搜索树。

例如:

鉴于BST [1,null,2,2],

   1
    \
     2
    /
   2

返回[2]。

注意:如果树有多个模式,您可以按任何顺序返回它们。

跟进:你可以不使用任何额外的空间吗? (假设由于递归而产生的隐式堆栈空间不计算)。

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 第一种解法

使用一个max变量来表示二叉树中的出现次数最多的节点值,使用HashMap来存储每个节点值及其出现的次数,借助一个递归方法,对二叉树中的节点值进行遍历,每次都将max的值进行更新。在遍历完所有节点后,先将最大值添加进ArrayList中,最后再以整型数组作为结果返回。

private Map<Integer, Integer> map;
private int max = 0;
public int[] findMode(TreeNode root) {
    if (root == null) {
        return new int[0];
    }
    map = new HashMap<Integer, Integer>();
    findMax(root);
    List<Integer> list = new LinkedList<>();
    for (int key: map.keySet()) {
        if (map.get(key) == max) {
            list.add(key);
        }
    }
    int[] result = new int[list.size()];
    for (int i = 0; i<result.length; i++) {
        result[i] = list.get(i);
    }
    return result; 
}

public void findMax(TreeNode root) {
    if (root.left != null) {
        findMax(root.left);
    }
    map.put(root.val, map.getOrDefault(root.val, 0)+1);
    max = Math.max(max, map.get(root.val));
    if (root.right != null) {
        findMax(root.right);
    }
}

03 第二种解法

第一种解法也可以用迭代的解法来实现,思路都是一样的,只是借助栈(或者队列)来遍历节点。

public int[] findMode2(TreeNode root) {
    if (root == null) {
        return new int[0];
    }
    int max = 0;
    Map<Integer, Integer> map = new HashMap<Integer, Integer>();
    Stack<TreeNode> stack = new Stack<TreeNode>();
    stack.push(root);
    while (!stack.isEmpty()) {
        TreeNode node = stack.pop();
        if (node.left != null) {
            stack.push(node.left);
        }
        map.put(node.val, map.getOrDefault(node.val, 0)+1);
        max = Math.max(max, map.get(node.val));
        if (node.right != null) {
            stack.push(node.right);
        }
    }
    List<Integer> list = new LinkedList<>();
    for (int key: map.keySet()) {
        if (map.get(key) == max) {
            list.add(key);
        }
    }
    int[] result = new int[list.size()];
    for (int i = 0; i<result.length; i++) {
        result[i] = list.get(i);
    }
    return result;
}

04 第三种解法

先来简单看下二叉搜索树的中序遍历,下面这个二叉搜索树中序遍历的结果为4,5,8,9,9,10,11

     9
    / \
   5   10
  / \  / \ 
 4   8 9  11

二叉搜索树在进行中序遍历后的节点值是有序排列的,并且题目中还说明了左根右节点值的关系是小于等于,因此我们只用比较当前节点值和前一个节点值即可,如果两节点值相等,当前节点值的出现次数就加1,否则次数重归于1,同时还要比较当前节点值的出现次数和历史节点值最大出现次数。

如果当前节点的出现次数大于历史最大次数,将当前节点的出现次数赋值给历史最大次数,然后将list清空,再将节点值添加进list中;如果当前节点的出现次数等于历史最大次数,那么将当前节点值也添加进list中去。

Integer prev = null;
int count = 1;
int max2 = 0;
public int[] findMode3(TreeNode root) {
    if (root == null) {
        return new int[0];
    }   
    List<Integer> list = new ArrayList<>();
    traverse(root, list);
    int[] res = new int[list.size()];
    for (int i = 0; i < list.size(); ++i) {
        res[i] = list.get(i);
    }
    return res;
}

private void traverse(TreeNode root, List<Integer> list) {
    if (root == null) {
        return;
    }
    traverse(root.left, list);
    if (prev != null) {
        if (root.val == prev) {
            count++;
        } else {
            count = 1;
        }
    }
    if (count > max2) {
        max2 = count;
        list.clear();
        list.add(root.val);
    } else if (count == max2) {
        list.add(root.val);
    }
    prev = root.val;
    traverse(root.right, list);
}

05 小结

算法专题目前已日更超过三个月,算法题文章113+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

HyperLynx中层叠设计实例 这两种方式有点区别,前一种方式只是增加层,需要自行修改层的类型,后一种方式可以选定为某一种类型,如果是增加信号层,软件会默认同时增加一层介质层。层叠已经有8层,按照示例的层叠有4个信号层、3个地平面层和1个电源平面层,对照进行层名称(LayerName)、介质类型(Type)及用途(Usage)设置。在这列中,有的是白色,有的是淡蓝色。白色的说明可以修改,如第一行是介质,通常在最外层的介质有两个用途,阻焊层和介质,单击该行会出现一个下拉菜单,选择SolderMask,即为阻焊层。... 阅读详情

相关推荐

HCIA重点知识

华为认证ICT工程师,是华为认证体系中用于标识个人能力在某一技术领域达到工程师级别的证明,表示通过认证的人员具备安装、配置、运行 ICT 设备,并进行基础故障排除的能力。抽象语言 -----> 编码 -----> 二进制 -----> 电信号 -----> 处理电信号信号的转换标准:协议,是一种允许电子设备相互交流的一系列标准的规则。即开放系统参考模型OSI/RM,简称“OSI”。OSI参考模型将计算机网络分为七个层次,自上而下依次为:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层。1、应用层:

Awen0201的博客 2543

LeetCode-501. Find Mode in Binary Search Tree(Java)

Given a binary search tree (BST) with duplicates, find all the mode(s) (the most frequently occurred element) in the given BST. Assume a BST is defined as follows: The left subtree of a node c

NOadu的专栏 1057

Blazor Session设置

微软官方封装了一些浏览器的操作,其中就有Session的操作的封装ProtectedSessionStorage 微软文档因为我们知道,依赖注入的生命周期是Singleton程序Scoped网页:刷新,url直接跳转都会重置。Transient路由C# Blazor 学习笔记(10):依赖注入但是没有一个和浏览器绑定的生命周期。即浏览器关闭才会退出。这个是后端无法获取的,因为后端根本不知道浏览器何时关闭。这个只能用浏览器自带的缓存。

qq_44695769的博客 1788

LeetCode 501. Find Mode in Binary Search Tree

501. Find Mode in Binary Search TreeGiven a binary search tree (BST) with duplicates, find all the mode(s) (the most frequently occurred element) in the given BST. Assume a BST is defined as follows:...

柳婼 の blog 3322

CloudSat卫星数据高效下载与自动化处理指南

本文详细介绍了CloudSat卫星数据的高效下载与自动化处理方法,包括交互式图形界面和wget批量下载技巧,以及使用Python脚本实现自动化处理和数据质量控制。内容涵盖从数据准备到实战应用的完整流程,特别适合气象研究和气候建模领域的工作者提升工作效率。

weixin_28700411的博客 233

配置VS Code使用Linux服务器上的Matlab

0、需求 Linux服务器上安装有Matlab 无图形界面,只能使用命令行工具,编辑文件不方便 1、VS Code插件安装 在扩展商店中搜索matlab,会出现Matlab Extension Pack,里面有整理好的matlab扩展 这里只安装了第一排的三个扩展 2、设置(Windows、Mac的设置类似,只是不同系统的文件路径不同) 安装好扩展,重启VS Code后,进行设置 打开:文件→首选项→设置(或快捷键ctrl+,),搜索matlab,结果如下图所示;直接打开完整json配置文件(图

赵彬的博客 5011

LeetCode-501. Find Mode in Binary Search Tree (JAVA)出现次数最多的元素

LeetCode-501. Find Mode in Binary Search Tree (JAVA)出现次数最多的元素

mine_song的博客 1814

从零开始:如何利用Device Monitoring Studio构建高效数据监控系统

本文详细介绍了如何利用HHD Device Monitoring Studio从零开始构建高效数据监控系统。涵盖基础架构设计、核心功能解析、实战部署指南及高级数据分析技术,帮助用户实现非侵入式监控,提升设备调试和网络协议分析效率。特别适合物联网和工业自动化领域的开发者与运维人员。

weixin_29201859的博客 329

leetcode[Find Mode in Binary Search Tree]//待整理多种解法

解法一: /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Soluti

Carmelo_Z的博客 540

dji psdk开发 关于SDK认证芯片的使用

Payload SDK V3.10.0 于 2025-1-8 发布,增加了 Matrice 4T/4E 机型支持,同时也增加了 DJI SDK 认证芯片(DJI SDK CC)功能支持。关于认证芯片的介绍大疆 SDK 认证芯片(DJI SDK Certified Chip),简称 DJI SDK CC,用于认证基于 DJI Eport/Eport-Lite 接口开发的第三方负载设备,确保设备能够正常工作并与无人机可以进行有效通信,起到负载安全认证和功能授权的作用。

热爱生活,忠于自己 2152

在 SAP S/4HANA Public Cloud 中,用 RAP 一键生成 PDF 并在 Fiori 前端触发下载的完整方案

create;update;delete;// 生成并返回当前文档上下文。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 416

leetcode85java_LeetCode算法题-Find Mode in Binary Search Tree(Java实现)

这是悦乐书的第246次更新,第259篇原创01 看题和准备今天介绍的是LeetCode算法题中Easy级别的第113题(顺位题号是501)。给定具有重复项的二叉搜索树(BST),找到给定BST中的所有模式(最常出现的元素)。假设BST定义如下:节点的左子树仅包含键小于或等于节点键的节点。节点的右子树仅包含键大于或等于节点键的节点。左右子树也必须是二叉搜索树。例如:鉴于BST [1,null,2,2...

weixin_35353904的博客 202

本地部署AI应用:基于Google Gemini的banana-prompt快速上手指南

AI应用开发的核心在于将大模型能力集成到实际场景中,其原理是通过API调用将用户输入转化为模型可理解的指令,再由模型生成响应。这一技术价值在于降低AI应用开发门槛,实现数据本地化处理与隐私保护。在工程实践中,开发者常面临环境配置复杂、API集成繁琐等挑战。本文聚焦于使用banana-prompt工具包,通过TypeScript技术栈和npm包管理,快速在Windows本地部署基于Google Gemini API的AI应用。该方案特别适用于ai-prompts提示词工程和content-creation内容

weixin_27188815的博客 318

leetcode 501. Find Mode in Binary Search Tree

Given a binary search tree (BST) with duplicates, find all the mode(s) (the most frequently occurred element) in the given BST. Assume a BST is defined as follows: The left subtree of a node c

淡然坊 459

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

LeetCode - Easy - 501. Find Mode in Binary Search Tree

LeetCode - Easy - 501. Find Mode in Binary Search Tree Topic Tree Description https://leetcode.com/problems/find-mode-in-binary-search-tree/ Given the root of a binary search tree (BST) with duplicates, return all the mode(s) (i.e., the most frequently o

KISS 317

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

LeetCode-501. Find Mode in Binary Search Tree [C++][Java]

​ Given therootof a binary search tree (BST) with duplicates, returnall themode(s)(i.e., the most frequently occurred element) in it. If the tree has more than one mode, return them inany order.

贫道绝缘子的博客 667

Leetcode 501 Find Mode in Binary Search Tree

Given a binary search tree (BST) with duplicates, find all the mode(s) (the most frequently occurred element) in the given BST. Assume a BST is defined as follows: The left subtree of a node c

夜色之浓,莫过于黎明前的黑暗。 265

LeetCode(Binary Search Tree)501. Find Mode in Binary Search Tree

LeetCode(Binary Search Tree)501. Find Mode in Binary Search Tree

weixin_45428910的博客 194

【Leetcode】501. Find Mode in Binary Search Tree

题目地址: https://leetcode.com/problems/find-mode-in-binary-search-tree/ 给定一个二叉搜索树,求其众数。 直接数一下每个数出现了多少次即可。代码如下: import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Solution { public int[] findMod

数学、算法爱好者的博客 159

Leetcode 501.二叉搜索树中的众数 Find Mode in Binary Search Tree(Java)

Leetcode 501.二叉搜索树中的众数 Find Mode in Binary Search Tree(Java) ##Tree## 二叉搜索树中的众数 二叉搜索树的中序遍历为有序序列,因此本题转换为在有序序列中寻找众数 max记录已经遍历过的数中,出现的最大频次 count记录当前遍历的数出现的频次 TreeNode pre记录上一个遍历的结点,如果题目没有Integer.MAX_VALUE,也可以将pre声明为int,并初始化为Integer.MAX_VALUE LinkedList<In

qq_42411921的博客 158

Java描述 LeetCode,501. Find Mode in Binary Search Tree 找出二叉树中的众数 Morris算法 详解

新算法,Morris,第一次见,很牛批的感觉,写的很详细,可以看看!

人在江湖 797

(Java)leetcode-501 Find Mode in Binary Search Tree (二叉搜索树中的众数)

中序遍历BST的应用场景。

不思量 184

501. Find Mode in Binary Search Tree【LeetCode by java】

Given a binary search tree (BST) with duplicates, find all themode(s)(the most frequently occurred element) in the given BST. Assume a BST is defined as follows: The left subtree of a no...

weixin_30501857的博客 129

LeetCode Find Mode in Binary Search Tree

原题链接在这里:https://leetcode.com/problems/find-mode-in-binary-search-tree/#/description 题目: Given a binary search tree (BST) with duplicates, find all themode(s)(the most frequently occurred element) ...

weixin_30786657的博客 100

Find Mode in Binary Search Tree:带重复元素的搜索二叉树Morris遍历查找频率最大的元素

Given a binary search tree (BST) with duplicates, find all the mode(s) (the most frequently occurred element) in the given BST. Assume a BST is defined as follows: The left subtree of a node c

小雄鹿的博客 1113
上一篇: LeetCode算法题-Keyboard Row(Java实现)
下一篇: LeetCode算法题-Base 7(Java实现)
程序员小川
博客等级 码龄10年 47粉丝 305原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值