leetcode 501. 二叉搜索树中的众数

news2024/11/25 15:32:50

2023.7.10

        这道题我的思路是适用于任意二叉树的思路:

  1. 先用任意一个遍历方法将节点保存至map<int,int>中,key为节点值,value为频率。
  2. 由于map没有对value(频率)排序的方法,所以将map的键值对转移至vector<pair<int,int>>中,再利用sort方法以及自定义一个cmp函数 来自定义排序方法。
  3. 由于众数可能不止一个,在得到一个从小到大(频率)的数组之后,将第一个值v[0]丢入最终数组ans中,再遍历剩下的元素,若频率等于第一个值的频率,则也将其丢入ans中。

        下面看下代码细节:

class Solution {
public:
    bool static cmp (const pair<int, int>& a, const pair<int, int>& b)
    //bool static cmp(pair<int,int>a,pair<int,int>b)
    {
        return a.second > b.second;
    }
    vector<int> findMode(TreeNode* root) {
        //遍历所有节点,并将其值以及出现频率丢入map中。
         unordered_map<int,int> map;
         stack<TreeNode*> stk;
         while(!stk.empty() || root)
         {
             while(root)
             {
                 stk.push(root);
                 root = root->left;
             }
             root = stk.top();
             stk.pop();
             map[root->val]++;
             root = root->right;
         }
        //将map的对组丢入vector中
         vector<pair<int,int>> v(map.begin(),map.end());
         vector<int> ans;
         //自定义排序
         sort(v.begin(),v.end(),cmp);
         //取出频率最大的节点值
         ans.push_back(v[0].first);
         //取出剩下可能频率最大的节点值
         for(int i=1; i<v.size(); i++)
         {
             if(v[i].second == v[0].second) ans.push_back(v[i].first);
         }  
         return ans;
    }
};

        这里解释一下cmp函数的几个关键字:

  • static:在C++中,static成员函数属于类本身,而不是类的实例。cmp 函数被声明为 bool static cmp,意味着它是一个静态成员函数。这意味着可以直接通过类名和作用域解析运算符来调用该函数,而不需要创建类的实例。
  • const: const 修饰函数参数表示该参数是只读的,即函数内部不会修改该参数的值。在 cmp 函数中,const pair<int, int>& aconst pair<int, int>& b 表示传入的参数 ab 是只读的,函数内部不会修改它们的值。

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

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

相关文章

TCP协议三次握手的抓包模拟

三次握手(Three-way Handshake)&#xff0c;是指建立一个 TCP 连接时&#xff0c;需要客户端和服务器总共发送3个包。 第一次握手([SYN], Seq x) 客户端发送一个SYN标记的包&#xff0c;Seq初始序列号x&#xff0c;发送完成后客户端进入SYN_SEND状态。 第二次握手([SYN,ACK]…

一个面试知识点: CreateThread() 与 _beginthread() 的区别

如题: 像现在有c11, 加上不写原生winApi 很久没有用这俩玩意了, 真的忘记了, 被问到这个的时候, 我还清晰记得之前在WPS里的时候专门了解这个 CreateThread的简单用法贴下面了 c win32API 【CreateThread】创建线程 其实就简单的记住 1._beginthread 底层还是 调用的 Creat…

calltree的安装与使用

目录 0 calltree 和 graphviz的关系 1 graphviz的安装很简单 : 2 有难的是calltree的安装,需要改一下代码. Doxygen的使用 参考 这个人的笔记都挺好的, 没事多看看 0 calltree 和 graphviz的关系 要想绘制函数调用图的话,需要用到2个工具, calltree 和 graphviz. calltr…

【记录】Yolov5官网下载避坑记录

写在前面&#xff1a;刚开始接触Yolov5时&#xff0c;对一些基础的概念很模糊&#xff0c;在官网下载也不知道该下载什么版本好。后续更是遇到了一些奇奇怪怪的坑。在此记录一下最初的研究过程&#xff0c;顺带填一下yolov5避坑专栏后面的坑。 目录 一、Yolov5误区 二、官网…

UVM中sequence机制-数据产生及传递机制

一 基础知识 参考 UVM——sequence机制(数据激励的产生、配置方式)_uvm激励_SD.ZHAI的博客-CSDN博客https://blog.csdn.net/weixin_46022434/article/details/105600081 1.1 sequence执行流程 1.2 sequence的启动方式 1.3 sequence数据产生--body()

TortoiseGit 入门指南03:将修改提交到版本库

你现在应该已经有了一个仓库&#xff0c;在工作过程中会对项目做一些修改&#xff0c;比如添加代码、修复错误等等&#xff0c;你将不定时的将这些更改 提交&#xff08;commit&#xff09;到代码仓库。 术语 提交 是将 暂存区 内容放入 版本库 。这个过程涉及到 Git 的一些基…

如何对你的代码进行内存消耗分析

对象生命周期 下面两种创建对象的语句有什么不同呢? 对于 Object myObject;,该对象被创建在栈上,它的特点就是脱离作用域后会自动销毁。而对于 new Object(),它会在堆上动态创建一个对象,它的特点就是即使脱离作用域,该对象也会一直存在,除非你手动释放(delete)它,否…

Layui 简单介绍及入门

目录 一.Layui &#xff08;国产品牌&#xff09; 1.1 Layui是什么 二.比较layui和easyui&#xff0c;bootstrap的区别 2.1 layui和bootstrap的对比 2.2 layui和easyui对比 三.Layui入门 四.案例 一.Layui &#xff08;国产品牌&#xff09; 1.1 Layui是什么 用我的话来…

峟思科普:水库坝体的裂缝防治措施有哪些

水库大坝的建设与施工是一项庞大的系统工程&#xff0c;它包括设计、施工、监理等各个环节。而裂缝问题是整个工程中最常见的问题之一&#xff0c;大坝工程中出现裂缝是一件很严重的事&#xff0c;不仅影响大坝的使用寿命&#xff0c;而且严重影响水库工程的整体效益。坝体裂缝…

让GPT来聊聊目前软件测试行业的就业形式

最近两个月一直处于忙碌状态&#xff1a;跳槽、转行、学习新的编程语言&#xff08;Python Golang&#xff09;、赶工期、面试招人……也正是这一些列的经历&#xff0c;对目前的就业形势和软件从业人员的发展有了一些新的观察和思考&#xff0c;在这篇文章分享给大家。 整体…

亚马逊云科技143项安全标准与合规性认证,帮助企业满足安全合规要求

在亚马逊云科技&#xff0c;为满足客户不断变化的需求&#xff0c;亚马逊云科技持续创新与迭代&#xff0c;设计的服务能帮助客户满足最严格的安全和合规性要求。针对安全相关工作&#xff0c;亚马逊云科技服务团队与Amazon Security Guardians云守护者项目密切配合&#xff0c…

Jira Tempo :如何创建 Dynamic Dropdown 类型的 Work Attributes?

官方示例&#xff1a; Jira Tempo 可以创建以下类型的工作属性&#xff08;Work Attributes&#xff09;: 其中&#xff0c;Dynamic Dropdown 支持外部接口&#xff0c;可以自己提供一个接口连接&#xff0c;如下&#xff1a; 官方示例中&#xff0c;给了一个 php 版本的示例…

UVM学习笔记--寄存器模型 Register Model

1.寄存器模型( Register model )简介 UVM的寄存器模型是一组高级抽象的类&#xff0c;用来对DUT中具有地址映射的寄存器和存储器进行建模。它非常贴切的反映DUT中寄存器的各种特性&#xff0c;可以产生激励作用于DUT并进行寄存器功能检查。通过UVM的寄存器模型&#xf…

通信算法之176: 基于Matlab的OFDM通信系统关键基带算法设计6-流程

一. 接收算法流程 粗同步&#xff08;分组检测&#xff09; 载波同步&#xff08;精细频偏估计&#xff09; 精同步&#xff08;OFDM起始&#xff0c;符号同步&#xff09; 1.4 信道估计&#xff08;长序列&#xff09; 1.5 信道均衡&#xff08;所有数据OFDM符号&#xff…

(黑客)自学路线

一、什么是网络安全&#xff08;黑客&#xff09; 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领…

基于SpringBoot+vue的准妈妈孕期交流平台设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

【工业机器人】用于轨迹规划和执行器分析的机械手和移动机器人模型(MatlabSimulink)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

STM32——使用cubemx和keil点亮第一个灯

一、环境 cubemx安装和搭建见博文 链接: STM32CubeMX安装 keil安装见软件安装管家&#xff0c;注意要是MDK版 二、cubemx操作 1.打开cubemx 2.选择ACCESS TO MCU SLCTOR,创建一个新的工程。 3.选择合适的芯片型号 具体的开发板芯片型号根据自己的板子来。我的是STMF429IG 4…

AT32F435/F437 QSPI驱动华邦/恒烁 NAND FLASH(W25N01G/ZB35Q01A)

好记性不如烂笔头&#xff0c;既然不够聪明&#xff0c;就乖乖的做笔记&#xff0c;温故而知新。 本文档用于本人对知识点的梳理和记录 目录 一、前言 二、器件分析 三、代码分析 四、结语 一、前言 (ST生态)雅特力AT32F435/F437 QSPI驱动NAND FLASH(W25N01G/ZB35Q01A) SPI驱…

如何使用WordPress构建一个亚马逊联盟商店

您想使用 WordPress 建立亚马逊联盟商店吗&#xff1f; 亚马逊联盟商店允许您作为联盟会员销售亚马逊的产品&#xff0c;并在每次销售中赚取收入。由于启动和运营成本较低&#xff0c;亚马逊联营店是开展新业务和在线赚钱的最简单方法之一。 在本文中&#xff0c;我们将向您展…