/**
* 501. 二叉搜索树中的众数
* @author wsq
* @date 2020/09/24
给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。
假定 BST 有如下定义:
结点左子树中所含结点的值小于等于当前结点的值
结点右子树中所含结点的值大于等于当前结点的值
左子树和右子树都是二叉搜索树
例如:
给定 BST [1,null,2,2],
1
\
2
/
2
返回[2].
提示:如果众数超过1个,不需考虑输出顺序
进阶:你可以不使用额外的空间吗?(假设由递归产生的隐式调用栈的开销不被计算在内)
链接:https://leetcode-cn.com/problems/find-mode-in-binary-search-tree
*/
package notsubmit;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
public class FindMode {
/**
* 描述元素出现的频率
*/
private Map<Integer, Integer> freqMap = new HashMap();
/**
* 采用Morris中序遍历
* 由于BFS的中序遍历产生的序列是非递减的,所以可以做下优化,不是用哈希表
* @param root
* @return
*/
public int[] findMode(TreeNode root) {
if(root == null) {
return null;
}
// 遍历二叉树所有的节点,统计元素出现的频率
TreeNode cur = root;
TreeNode mostRight = null;
while(cur != null) {
if(cur.left == null) {
int preNum = freqMap.get(cur.val) == null ? 0 : freqMap.get(cur.val);
freqMap.put(cur.val, ++preNum);
cur = cur.right;
}else {
mostRight = getMostRight(cur);
if(mostRight.right == null) {
mostRight.right = cur;
cur = cur.left;
}else {
countFreq(cur.val);
mostRight.right = null;
cur = cur.right;
}
}
}
ArrayList<Integer> ansList = new ArrayList<Integer>();
int maxVal = -1;
for(Integer k: freqMap.keySet()) {
int val = freqMap.get(k);
if(maxVal == -1) {
ansList.add(k);
maxVal = val;
continue;
}else if(val > maxVal){
ansList.clear();
maxVal = val;
ansList.add(k);
}else if(val == maxVal) {
ansList.add(k);
}
}
int[] ans = new int[ansList.size()];
for(int i=0; i < ansList.size(); ++i) {
ans[i] = ansList.get(i);
}
return ans;
}
public TreeNode getMostRight(TreeNode head) {
TreeNode node = head.left;
while(node.right != null && node.right != head) {
node = node.right;
}
return node;
}
public void countFreq(int val) {
int preNum = freqMap.get(val) == null ? 0 : freqMap.get(val);
freqMap.put(val, ++preNum);
}
public static void main(String[] args) {
}
}
相关推荐
在 PyCharm 中使用 Copilot
此外,要在 PyCharm 中使用 GitHub Copilot,您必须有效订阅 Copilot。在 PyCharm 中安装 GitHub Copilot 后,您现在可以将其用作项目的扩展。此外,它很容易安装在不同的 IDE 平台上,您还可以为特定编程语言启用 GitHub 插件。此外,按照以下步骤,您可以轻松地在 PyCharm 中安装 GitHub Copilot。此外,在 IDE 上使用 GitHub Copilot 时,您可以使用一些快捷方式。
LeetCode 501. 二叉搜索树中的众数
给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。 假定 BST 有如下定义: 结点左子树中所含结点的值小于等于当前结点的值 结点右子树中所含结点的值大于等于当前结点的值 左子树和右子树都是二叉搜索树 例如: 给定 BST [1,null,2,2], 1 2 / 2 返回[2]. 提示:如果众数超过1个,不需考虑输出顺序 解析:根据BST树的特征,BST树的中序遍历是一个非递减数列,所以求出树的中序遍历,再去遍历这个序列即可 /** * Definition fo
保姆级教程:用COMSOL LiveLink™ for MATLAB 玩转自定义PDE,从理论到仿真一条龙
本文详细介绍了如何利用COMSOL LiveLink™ for MATLAB实现自定义PDE的从理论到仿真的完整流程。通过PDE模块与MATLAB的无缝集成,用户可以灵活处理非标准偏微分方程,适用于材料建模、传热传质验证等多物理场耦合研究。教程涵盖环境配置、方程标准化、界面操作及高级应用技巧,为工程仿真研究者提供原子级控制方案。
Leetcode 501. 二叉搜索树中的众数 C++
Leetcode 501. 二叉搜索树中的众数 题目 给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。 假定 BST 有如下定义: 结点左子树中所含结点的值小于等于当前结点的值 结点右子树中所含结点的值大于等于当前结点的值 左子树和右子树都是二叉搜索树 测试样例 给定 BST [1,null,2,2], 1 \ 2 / 2 返回[2]. 提示:如果众数超过1个,不需考虑输出顺序 题解 中序遍历,用哈希表记录数字出现的次数,同
REST-meta-MDD Data总结
sMRI数据使用:nwc1、nwc2、nwc3(同样数据集相关论坛中有相关信息指向需要使用wc1、wc2、wc3)多方咨询与讨论后决定使用nwc数据,这里说明wc数据相对wc数据要大的多如wc1的大小为1.33GB,而nwc1的数据却有6.90GB。VBM文件:/REST-meta-MDD/Sharing/REST-meta-MDD-VBM- phase1 -Sharing.tar.gz。1、Excel中的表型信息:1-男,2-女;-9999或空白表示缺少数据。
中国高精度年度平均气温栅格数据集(1901-2024)
本文基于中国月度平均气温栅格数据集,计算生成1901-2024年1km分辨率的年度平均气温数据集,并按中国省市行政区划进行裁剪。该数据集融合CRU全球数据和WorldClim高分辨率数据,经496个站点验证,具有高时空精度和长时间序列特点,覆盖全国(含港澳台)逾百年气温记录,为气候变化研究、生态水文分析及农业生产评估等提供重要数据支撑。数据格式为Tif,单位为0.1℃,可获取全国、各省及各市三个尺度的气温栅格数据。
Java实现 LeetCode 501 二叉搜索树中的众数
501. 二叉搜索树中的众数 给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。 假定 BST 有如下定义: 结点左子树中所含结点的值小于等于当前结点的值 结点右子树中所含结点的值大于等于当前结点的值 左子树和右子树都是二叉搜索树 例如: 给定 BST [1,null,2,2], 1 \ 2 / 2 返回[2]. 提示...
系统安装、qt配置、安装pcie驱动
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 安装Linux系统指定:ununtu20.04并配置相关软件环境 前言 提示:这里可以添加本文要记录的大概内容: ununtu20.04、Qt 5.9.0、pcie驱动 提示:以下是本篇文章正文内容,下面案例可供参考 一、安装系统 制作系统盘(win10),在开机时按相应键进入BIOS,(华硕需要先改配置启动->CSM->开启->第一个选项选第一个或第二个),等待即可 进入后按照https://www.sysgeek.
力扣501二叉搜索树中的众数(c++)
首先如果不是二叉搜索树的话,应该怎么解题,是二叉搜索树,又应该如何解题,两种方式做一个比较,可以加深对二叉树的理解。如果不是二叉搜索树,最直观的方法一定是把这个树都遍历了,用map统计频率,把频率排个序,最后取前面高频的元素的集合。此时又有问题了,因为要求最大频率的元素集合(注意是集合,不是一个元素,可以有多个众数),如果是数组上大家一般怎么办?遍历有序数组的元素出现频率,从头遍历,那么一定是相邻两个元素作比较,然后就把出现频率最高的元素输出就可以了。既然是搜索树,它中序遍历就是有序的。
Advanced Installer打包避坑指南:如何正确配置64位系统下的Java环境与注册表条件(以15.7版本为例)
本文详细解析了使用Advanced Installer 15.7版本在64位系统下打包Java应用时的常见问题与解决方案。重点介绍了注册表重定向机制、Java环境检测的双保险策略、环境变量设置的隐藏坑以及权限管理的进阶技巧,帮助开发者避免安装包在用户机器上无法运行的幽灵问题。
【电机应用控制】——直流有刷电机&驱动板/编码器介绍&PID算法&实操代码思路
声明:学习笔记来自正点原子B站教程,仅供学习交流!!玩具车、平衡车、无人机、印刷机、打印机、手机振动马达等电机即电动机(motor),也叫作马达,电能转化为机械能。按电源:直流、交流按用途:驱动用、控制用按运转速度:高速、低速、恒速、调速直流电机(有刷、无刷)、舵机、步进电机、伺服电机1、直流有刷电机(Brushed DC Motor,简称BDC)是内含电刷装置的将直流电能转化为机械能的电动机。例如四驱赛车四个马达操控方便、成本低、维护时换电刷即可;
Leetcode501. 二叉搜索树中的众数
Leetcode501. 二叉搜索树中的众数 题目: 给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。 假定 BST 有如下定义: 结点左子树中所含结点的值小于等于当前结点的值 结点右子树中所含结点的值大于等于当前结点的值 左子树和右子树都是二叉搜索树 例如: 给定 BST [1,null,2,2], 1 \ 2 / 2 返回[2]. 提示:如果众数超过1个,不需考虑输出顺序 进阶:你可以不使用额外的空间吗?(假设由递归产生
【软考高项论文】论信息系统项目管理的干系人绩效域
例如,在处理与电信运营商合作铺设光纤网络的问题时,考虑到其在通信设施建设和运维方面的专业性和重要性,我们将之定位为高权力高利益的干系人,给予了高度关注和优先沟通。项目全程,我们对干系人绩效域的执行效果进行了定期检查和评估,通过定量与定性的数据收集,确认了项目在干系人管理上的成效,具体表现为:建立了稳固的工作关系网络,使干系人普遍认可项目目标;鉴于本项目牵涉到政府各级部门、企事业单位、市民团体、技术研发伙伴等多种类型的干系人,且干系人的诉求和影响力各异,因此,有序且持续的干系人参与管理显得尤为关键。
LeetCode:501.二叉搜索树中的众数
LeetCode:501.二叉搜索树中的众数
Statistics and Machine Learning Toolbox
Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具
C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片
基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正
501. 二叉搜索树中的众数【二叉树】
你可以不使用额外的空间吗?(假设由递归产生的隐式调用栈的开销不被计算在内)中的所有 众数(即,出现频率最高的元素)。如果树中有不止一个众数,可以按。给你一个含重复值的二叉搜索树(
华为的C语言编程规范.pdf
华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。
LeetCode501——二叉搜索树中的众数
我的LeetCode代码仓:https://github.com/617076674/LeetCode 原题链接:https://leetcode-cn.com/problems/find-mode-in-binary-search-tree/ 题目描述: 知识点:二叉树的中序遍历 思路一:用哈希表保存每个数字出现的次数 这个思路,遍历二叉树时用前、中、后序3种遍历方式均可。 时间...
pscad IEEE标准系统搭建说明
pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。
leetcode501-二叉搜索树中的众数
leetcode501. 二叉搜索树中的众数
LeetCode 501.二叉搜索树中的众数
给你一个含重复值的二叉搜索树(BST)的根节点root,找出并返回 BST 中的所有众数(即,出现频率最高的元素)。如果树中有不止一个众数,可以按返回。[1, 10^4]你可以不使用额外的空间吗?(假设由递归产生的隐式调用栈的开销不被计算在内)
LC 501.二叉搜索树中的众数
给你一个含重复值的二叉搜索树(BST)的根节点root,找出并返回 BST 中的所有(即,出现频率最高的元素)。如果树中有不止一个众数,可以按返回。[2]root = [0][0]1104−105≤Nodeval≤105你可以不使用额外的空间吗?(假设由递归产生的隐式调用栈的开销不被计算在内)
【LeetCode】第501题——二叉搜索树中的众数(难度:简单)
【LeetCode】第501题——二叉搜索树中的众数(难度:简单)题目描述解题思路代码详解思路一:中序遍历+HashMap思路二:中序遍历(但不用记录所有val的出现次数)思路三:Morris中序遍历+思路二注意点 题目描述 给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。 假定 BST 有如下定义: 结点左子树中所含结点的值小于等于当前结点的值 结点右子树中所含结点的值大于等于当前结点的值 左子树和右子树都是二叉搜索树 示例: 输入: BST [1,null,
LeetCode 501 二叉搜索树中的众数
LeetCode 501 二叉搜索树中的众数 题目链接 给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。 假定 BST 有如下定义: 结点左子树中所含结点的值小于等于当前结点的值 结点右子树中所含结点的值大于等于当前结点的值 左子树和右子树都是二叉搜索树 例如: 给定 BST [1,null,2,2], 1 \ 2 / 2 返回[2]. 简单BFS,统计每个结点出现的次数即可,AC代码如下: /** * Definition
[leetCode]501. 二叉搜索树中的众数
题目 链接:https://leetcode-cn.com/problems/find-mode-in-binary-search-tree 给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。 假定 BST 有如下定义: 结点左子树中所含结点的值小于等于当前结点的值 结点右子树中所含结点的值大于等于当前结点的值 左子树和右子树都是二叉搜索树 例如: 给定 BST [1,null,2,2], 1 \ 2 / 2 返回[2].
1万+



被折叠的 条评论
为什么被折叠?



