LeetCode 501: 二叉搜索树中的众数 | C++语言版

news2024/12/25 14:23:05

LeetCode 501. 二叉搜索树中的众数 | C++语言版

    • LeetCode 501. 二叉搜索树中的众数
      • 题目描述
      • 解题思路
        • 思路一:使用迭代
          • 代码实现
          • 运行结果
          • 参考文章:
        • 思路二:减少遍历节点数
          • 代码实现
          • 运行结果
          • 参考文章:

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

题目描述

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

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

假定 BST 满足如下定义:

结点左子树中所含节点的值 小于等于 当前节点的值
结点右子树中所含节点的值 大于等于 当前节点的值
左子树和右子树都是二叉搜索树
在这里插入图片描述

在这里插入图片描述

解题思路

思路一:使用迭代

代码实现

C++

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
private:
    // 最大频率
    int maxCount=0;
    // 统计频率
    int count=0;
    //前一节点
    TreeNode* pre=NULL;
    //结果集
    vector<int> result;

    void searchBST(TreeNode* cur){
        if(cur==NULL) return;
        
        //左
        searchBST(cur->left);
        
        //中
        // 第一个节点 频率为1
        if(pre==NULL) count=1;
        // 当前节点cur与前一个节点pre数值相同 频率加1
        else if(pre->val==cur->val) count++;
        // 数值不同 频率不变
        else count=1;
        // 更新上一个节点
        pre=cur;

        //当前元素频率count 等于最大频率 maxCount,把这个元素直接加入结果集中
        if(count==maxCount){
            result.push_back(cur->val);
        }

        //当前元素频率count 大于最大频率 maxCount
        if(count>maxCount){
            // 更新最大频率
            maxCount=count;
            //清空结果集
            result.clear();
            //把这个元素加入到结果集中
            result.push_back(cur->val);
        }

        //右
        searchBST(cur->right);

        return;
    }

public:
    vector<int> findMode(TreeNode* root) {
        //二叉搜索树(BST):使用中序遍历进行有序遍历(左中右)

        //遍历有序数组的元素出现频率,从头遍历,那么一定是相邻两个元素作比较,然后就把出现频率最高的元素输出就可以了。在树中就使用指针指向前一个节点,这样每次cur(当前节点)才能和pre(前一个节点)作比较

        //求最大频率的元素集合(多个众数):先遍历一遍数组,找出最大频率(maxCount),当前元素频率count 大于 maxCount的时候,不仅要更新maxCount,而且要清空结果集,最后把这个元素加入到结果集中

        count=0;
        maxCount=0;
        TreeNode* pre=NULL;
        result.clear();

        searchBST(root);

        return result;

    }
};
运行结果

在这里插入图片描述

参考文章:

https://programmercarl.com/0501.%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E4%B8%AD%E7%9A%84%E4%BC%97%E6%95%B0.html#%E9%80%92%E5%BD%92%E6%B3%95

思路二:减少遍历节点数

代码实现

C++

在这里插入代码片
运行结果
参考文章:

在这里插入图片描述

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

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

相关文章

Edius抠像过程(实践笔记)

最近的工作有点烦&#xff0c;一个月左右的时间全是在帮别人做视频的过程&#xff08;在我所在的行业里&#xff0c;就是打杂&#xff09; 因为自己不专业&#xff0c;所有的操作都是现学现用&#xff0c;前几个视频还好说&#xff0c;随便剪剪&#xff0c;就是看他们本人录的…

水务行业怎么运用智能配电

摘要&#xff1a;在构建智慧水务和“双碳”时代背景下&#xff0c;智能配电系统在水务行业中发挥日益突出的重要作用。本文首先回顾了智能配电系统在水务行业的发展历程&#xff0c;并对其应用现状进行了分析&#xff0c;进而展望了智能配电系统在水务行业的发展趋势。 关键词&…

走进小程序【五】微信小程序架构之【逻辑层】详解

文章目录 &#x1f31f;前言&#x1f31f;小程序架构&#x1f31f;逻辑层 App Service&#x1f31f;注册小程序&#x1f31f;注册页面&#x1f31f;使用 Page 构造器注册页面&#x1f31f;在页面中使用 behaviors&#x1f31f;使用 Component 构造器构造页面 &#x1f31f;页面…

信创实力认证,创邻科技荣获“2023爱分析·信创产品及服务创新奖”

近日&#xff0c;数字化市场研究咨询机构爱分析正式发布“2023爱分析信创产品及服务创新奖”评选结果。经过申报、初评、调研、终评多轮角逐&#xff0c;创邻科技凭借自研产品Galaxybase国产原生高性能图平台以及国产化替代方案成功获评“2023爱分析信创产品及服务创新奖”。 据…

KDZD606绝缘服试验装置

一、产品概述 KDZD606绝缘服试验装置是按照国家电力公司关于颁发DL/T 976-2017《带电作业用工具、装置和设备预防性试验规程》的要求的基础上研制而成&#xff0c;本产品各项指标均符合国标的要求。可以按DL/T 976-2017《带电作业用工具、装置和设备预防性试验规程》要求对绝缘…

Nginx的漏洞浮现

本文参考https://vulhub.org/#/environments/nginx/nginx_parsing_vulnerability/ 环境搭建均是采用docker 拉取环境请移步到参考。 一、Nginx的配置错误案列 1. CRLF注入漏洞 配置错误文件error1.conf rootubuntu-virtual-machine:/vulhub/vulhub-master/nginx/insecure-confi…

「解析」Pytorch 自动计算 batchsize

日志是一个十分必要的操作&#xff0c;有助于后期分析实验结果&#xff0c;特别是在多台不同环境下训练&#xff0c;为了区分&#xff0c;还是十分有必要记录相关平台信息的&#xff0c;比如 hostname&#xff0c;Python版本信息&#xff0c;Pytorch版本信息等&#xff01; im…

SpringSecurity定义多个过滤器链

在Spring Security中可以定义多个过滤器链&#xff0c;一个WebSerityConfigurerAdapter的实例就可以配置一个过滤器链&#xff0c;我们只需要配置多个WebSerityConfigurerAdapter的实例即可 可以看到&#xff0c;当请求到达 FilterChainProxy 之后&#xff0c;FilterChainProx…

什么是 CDN

CDN 是一种用来分发内容的网络拓扑结构&#xff0c;在彻底搞明白它之前&#xff0c;我们需要先来理解另外两个名词。 1、节点 用户使用CDN网络前&#xff0c;CDN提供商会在全国/全球部署多个节点。这里的节点可以看做机房&#xff0c;或者服务器集群&#xff0c;专业的称呼是…

瑞吉外卖项目——前后端分离

前后端分离开发 介绍 前后端分离开发&#xff0c;就是在项目开发过程中&#xff0c;对于前端代码的开发由专门的前端开发人员负责&#xff0c;后端代码则由后端开发人员负责&#xff0c;这样可以做到分工明确、各司其职&#xff0c;提高开发效率&#xff0c;前后端代码并行开…

Compose 学习总结

ompose发布正式版已经有一段时间了。趁最近比较闲&#xff0c;抓紧学习一波。 学习过程中&#xff0c;主要以实战项目中常用技术为目标。下面是项目地址&#xff0c;会长期更新&#xff0c;希望能给正在学习Compose的小伙伴一点参考。同时您有什么好的建议&#xff0c;也可以提…

嗖的一下!3分钟用ChatGPT生成海南旅游思维导图!

大家好&#xff0c;我是菜鸟哥&#xff01; 五一长假即将来临&#xff0c;很多小伙伴都要准备出去玩了&#xff01;旅游肯定要做攻略啊&#xff0c;比如热门的景点海南三亚&#xff0c;北京&#xff0c;上海&#xff0c;成都这些都是打卡的网红景点&#xff01;小编比较喜欢去海…

IIC协议相关

一.IIC协议初识 IIC(集成电路总线)&#xff0c;半双工同步通信方式 *特点 1.简单性和有效性 由于接口直接在组件之上&#xff0c;因此IIC总线占用的空间特别小&#xff0c;减少了电路板的空间和芯片管脚的数量&#xff0c;降低了互联成本&#xff0c;总线的长度可高达25英尺…

Figma转Sketch的3种免费又快捷的方法!

Figma和Sketch是UI设计师常用的两款软件。Figma属于在线协作设计工具&#xff0c;而Sketch是一款本地应用程序。它们都有许多优点&#xff0c;深受许多设计师的喜爱。然而&#xff0c;在实际工作中&#xff0c;有时需要将这两种文件进行转换&#xff0c;例如将需要在Sketch中使…

AI绘画——Night Sky YOZORA Model 模型 ——“实现终极图像质量和大图像尺寸(>1536 x 1024)”

目录 Night Sky YOZORA Model 模型 ——“实现终极图像质量和大图像尺寸&#xff08;>1536 x 1024&#xff09;”由YozoRaAru培训 如果你需要更好的色彩表现&#xff0c;我推荐你试一下Color Box 省流版介绍&#xff1a;一个字“炫”&#xff0c;tag也是越炫越好 以下是…

javaweb830在线答疑系统dzkfA1A5程序

2&#xff0e;系统用户管理&#xff1a;不管是超级管理员还是普通管理员都需要管理系统用户&#xff0c;包括普通管理员的添加、删除、修改、查询&#xff0c;修改管理员的登录密码&#xff0c;新添加的管理员用户可以登录系统。 3&#xff0e;注册用户管理&#xff1a;游客在前…

多因子优化,多任务优化,多模式优化之间的区别

最近几年在进化计算这个圈子里多任务优化Multitasking很火&#xff0c;其中包含多因子Multifactorial Evolutionary, 多任务 Multitasking Evolutionary, 和多模式进化 Multiform Evolutionary。 今天就来讲讲他们之间的区别。 多因子优化 在“Enhancing Evolutionary Multi…

CCF-CSP真题《202303-1 田地丈量》思路+python,c++满分题解

想查看其他题的真题及题解的同学可以前往查看&#xff1a;CCF-CSP真题附题解大全 试题编号&#xff1a;202303-1试题名称&#xff1a;田地丈量时间限制&#xff1a;1.0s内存限制&#xff1a;512.0MB问题描述&#xff1a; 问题描述 西西艾弗岛上散落着 n 块田地。每块田地可视为…

HTTP与HTTPS详解

一、HTTP的概念 HTTP是超文本传输协议&#xff0c;是一种应用层协议&#xff0c;是基于为浏览器/服务器间提供统一的信息交换格式而出现的&#xff0c;其发展历程为HTTP/1.0、HTTP/1.1、HTTP/2、HTTP/3。 在HTTP/3之前&#xff0c;HTTP都是基于TCP传输的。 二、HTTP报文格式 …

设计模式之状态模式(C++)

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 一、状态模式是什么&#xff1f; 状态模式是一种行为型的软件设计模式&#xff0c;当一个对象的内在状态改变时&#xff0c;其行为…