二叉树---二叉搜索树中的众数

题目:

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

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

假定 BST 满足如下定义:

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

思路:中序遍历二叉搜索树可以得到递增序列。

  用pre存储前一个便利的节点,root为现在访问的节点 ,count存储现在访问的节点值出现的频率,maxCount存储节点值中最大出现频率,resList存储结果集。

  如果pre=null或root.val!=pre.val说明root节点值未出现过,令count=1;否则root节点值以及出现过,count+1。

  然后判断count与maxCount的关系。如果count>maxCount,说明resList结果集中存储的结果全都不符合要求,需要清除,把root.val加入结果集,maxCount需要更新为count;如果count=maxCount,则把root.val加入结果集;如果count<maxCount,不需要任何处理。

递归代码:

    List<Integer> resList=new ArrayList<>();//结果集int maxcount=0;//记录最大频率int count=0;//记录当前节点值出现的频率TreeNode pre=null;//记录前一个遍历节点public int[] findMode(TreeNode root) {find(root);return resList.stream().mapToInt(Integer::intValue).toArray();}public void find(TreeNode root){if(root==null) return;find(root.left);//计数if(pre==null||root.val!=pre.val)count=1;elsecount++;//更新结果以及maxcountif(count>maxcount){resList.clear();//最大频率次数改变,之前统计的结果需要全部清除resList.add(root.val);maxcount=count;}else if(count==maxcount){resList.add(root.val);}pre=root;find(root.right);}

注意:返回值为int数组,结果集为List,将List转换为int数组不能直接调用toArray()函数,因为toArray()的返回值为Object数组。借助stream流,将List存储到stream流中在转换为int数组。

迭代代码:

    public int[] findMode(TreeNode root) {List<Integer> resList=new ArrayList<>();//结果集int maxcount=0;//记录最大频率int count=0;//记录当前节点值出现的频率TreeNode pre=null;//记录前一个遍历节点Stack<TreeNode> stack=new Stack<>();if(root!=null)stack.add(root);while(!stack.isEmpty()){TreeNode cur=stack.peek();if(cur!=null){stack.pop();if(cur.right!=null) stack.add(cur.right);stack.add(cur);stack.add(null);if(cur.left!=null) stack.add(cur.left);}else{stack.pop();TreeNode tmp=stack.pop();//计数if(pre==null||tmp.val!=pre.val)count=1;else count++;pre=tmp;//更新pre//更新maxcount与resListif(count>maxcount){resList.clear();maxcount=count;resList.add(tmp.val);}else if(count==maxcount){resList.add(tmp.val);}}}return resList.stream().mapToInt(Integer::intValue).toArray();}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/49214.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PingCAP 王琦智:下一代 RAG,tidb.ai 使用知识图谱增强 RAG 能力

导读 随着 ChatGPT 的流行&#xff0c;LLMs&#xff08;大语言模型&#xff09;再次进入人们的视野。然而&#xff0c;在处理特定领域查询时&#xff0c;大模型生成的内容往往存在信息滞后和准确性不足的问题。如何让 RAG 和向量搜索技术在实际应用中更好地满足企业需求&#…

昇思25天学习打卡营第14天|计算机视觉

昇思25天学习打卡营第14天 文章目录 昇思25天学习打卡营第14天FCN图像语义分割语义分割模型简介网络特点数据处理数据预处理数据加载训练集可视化 网络构建网络流程 训练准备导入VGG-16部分预训练权重损失函数自定义评价指标 Metrics 模型训练模型评估模型推理总结引用 打卡记录…

Electron 和 React 开发桌面应用程序

目录 书籍推荐 Electron React 在线资源和教程 官方文档 在线教程 综合学习路径 经典开发案例 Visual Studio Code Hyper Tusk Notable Beekeeper Studio 开源项目和示例代码 Electron React Boilerplate Electron Forge + React Electron React Template 学…

FPGA开发在verilog中关于阻塞和非阻塞赋值的区别

一、概念 阻塞赋值&#xff1a;阻塞赋值的赋值号用“”表示&#xff0c;对应的是串行执行。 对应的电路结构往往与触发沿没有关系&#xff0c;只与输入电平的变化有关系。阻塞赋值的操作可以认为是只有一个步骤的操作&#xff0c;即计算赋值号右边的语句并更新赋值号左边的语句…

Transformer-Bert---散装知识点---mlm,nsp

本文记录的是笔者在了解了transformer结构后嗑bert中记录的一些散装知识点&#xff0c;有时间就会整理收录&#xff0c;希望最后能把transformer一个系列都完整的更新进去。 1.自监督学习 bert与原始的transformer不同&#xff0c;bert是使用大量无标签的数据进行预训…

规范:前后端接口规范

1、前言 随着互联网的高速发展&#xff0c;前端页面的展示、交互体验越来越灵活、炫丽&#xff0c;响应体验也要求越来越高&#xff0c;后端服务的高并发、高可用、高性能、高扩展等特性的要求也愈加苛刻&#xff0c;从而导致前后端研发各自专注于自己擅长的领域深耕细作。 然…

volatile,最轻量的同步机制

目录 一、volatile 二、如何使用&#xff1f; 三、volatile关键字能代替synchronized关键字吗&#xff1f; 四、总结&#xff1a; 还是老样子&#xff0c;先来看一段代码&#xff1a; 我们先由我们自己的常规思路分析一下代码&#xff1a;子线程中&#xff0c;一直循环&…

NoSQL之Redis非关系型数据库

目录 一、数据库类型 1&#xff09;关系型数据库 2&#xff09;非关系型数据库 二、Redis远程字典服务器 1&#xff09;redis介绍 2&#xff09;redis的优点 3&#xff09;Redis 为什么那么快&#xff1f; 4&#xff09;Redis使用场景 三、Redis安装部署 1&#xff0…

kail-linux如何使用NAT连接修改静态IP

1、Contos修改静态IP vi /etc/sysconfig/network-scripts/ifcfg-ens33&#xff0c; 标记红色处可能序号会变动 参考linux配置网络不通解决方案_kylinv10sp2 网关不通-CSDN博客https://tanrt06.blog.csdn.net/article/details/132430485?spm1001.2014.3001.5502 Kail时候NAT连…

从 NextJS SSRF 漏洞看 Host 头滥用所带来的危害

前言 本篇博文主要内容是通过代码审计以及场景复现一个 NextJS 的安全漏洞&#xff08;CVE-2024-34351&#xff09;来讲述滥用 Host 头的危害。 严正声明&#xff1a;本博文所讨论的技术仅用于研究学习&#xff0c;旨在增强读者的信息安全意识&#xff0c;提高信息安全防护技能…

NCRE2-3 网络服务器选型

记忆的部分比较多&#xff0c;会有错误 网络服务器的分类 了解 应用领域不同 Internet通用服务器数据库服务器文件服务器应用服务器 按网络应用规模 基础级服务器工作组级服务器部门级服务器企业级服务器 按网络服务器主机的硬件体系结构 基于CISC处理器的Inter机构(IA)的…

浅谈断言之XML Schema断言

浅谈断言之XML Schema断言 “XML Schema断言”是一种专门用于验证基于XML的响应是否遵循特定XML Schema定义的标准和结构的断言类型。下面我们将详细探讨XML Schema断言的各个方面。 XML Schema断言简介 XML Schema断言&#xff08;XML Schema Assertion&#xff09;允许用户…

fastJSON 解决kafka消息斜杠转义问题

Bug: kafka发送消息时的JSON转义异常 问题描述: 问题描述:kafka消息发送出去但是消费者执行相关逻辑的时候报错. 场景:当时实习的时候需要模拟数据做一个实时经纬度传输的接口,使用kafka实时发送消息将数据同步到数据库中 问题分析: fastjson使用不当可能导致转义异常**,kafka…

Android 15 之如何快速适配 16K Page Size

在此之前&#xff0c;我们通过 《Android 15 上 16K Page Size 为什么是最坑》 介绍了&#xff1a; 什么是16K Page Size为什么它对于 Android 很坑如何测试 如果你还没了解&#xff0c;建议先去了解下前文&#xff0c;然后本篇主要是提供适配的思路&#xff0c;因为这类适配…

计算机视觉9 全卷积网络

全卷积网络&#xff08;Fully Convolutional Network&#xff0c;简称 FCN&#xff09;在计算机视觉领域具有重要地位。 传统的卷积神经网络&#xff08;CNN&#xff09;在最后的输出层通常使用全连接层来进行分类任务。然而&#xff0c;全连接层会丢失空间信息&#xff0c;使得…

Facebook Dating:社交平台的约会新体验

随着社交媒体的普及和技术的发展&#xff0c;传统的社交方式正在经历革新&#xff0c;尤其是在约会这个领域。Facebook作为全球领先的社交平台&#xff0c;推出了Facebook Dating&#xff0c;旨在为用户提供一个全新的约会体验。本文将探讨Facebook Dating如何重新定义社交平台…

OpenCV 安装与基础使用教程(Python)

文章目录 一、硬件要求二、安装三、功能介绍总结 一、硬件要求 OpenCV 是一个跨平台的计算机视觉库&#xff0c;对硬件的要求并不严格&#xff0c;但为了更好的性能和体验&#xff0c;建议满足以下配置&#xff1a; 操作系统&#xff1a;Windows 10 或更高版本&#xff0c;Ub…

mysql 根据一个表的id,查询另一个表,看看数据是否存在

如果你想要检查一个表中的id是否在另一个表中作为外键存在&#xff0c;你可以使用SQL的EXISTS子句来完成这个任务。以下是一个例子&#xff1a; 假设我们有两个表&#xff0c;orders和customers。orders表有一个customer_id字段&#xff0c;我们想要检查customers表中的每个id是…

43 华三AC登录Web页面

一 无线上WEB页面 1 创建vlan 56 [AC-KongZhi]vlan 56 2 退出 [AC-KongZhi-vlan56]quit 3 进入vlan三层口 配置IP地址 [AC-KongZhi]interface Vlan-interface 56 [AC-KongZhi-Vlan-interface56]ip address 192.168.56.55 24 4 在AC控制器与Host主机的接口上能通关vlan 5…

高等数学重难点突破:高阶导数的计算

写在最前 文章目录 写在最前方法一&#xff1a;找规律方法二&#xff1a;牛顿莱布尼茨公式方法三&#xff1a;泰勒公式方法四&#xff1a; 数学归纳法 本文重点讨论总结面对高阶导数&#xff0c;我们可以使用哪些方法(工具&#xff09;来解决计算高阶导数问题 方法概述&#xf…