代码随想录第二十三天 | 530.二叉搜索树的最小绝对差,501.二叉搜索树中的众数,236.二叉树的最近公共祖先

530.二叉搜索树的最小绝对差

看完想法:需要熟悉一下双指针的操作,好久没复习了,优先掌握递归

遇到在二叉搜索树上求什么最值,求差值之类的,都要思考一下二叉搜索树可是有序的,要利用好这一特点!

vector<int> sec; //注意是私有全局变量
    void puttree(TreeNode* root){
        
        if(root == nullptr) return ;
        puttree(root->left);
        sec.push_back(root->val);
        puttree(root->right);
        
    }

    int getMinimumDifference(TreeNode* root) {
        sec.clear();
        puttree(root);
        int minnum = INT_MAX;  //求最小值,一开始要设置个最大
        for(int i=0; i<sec.size()-1; i++){
            minnum = min(minnum,abs(sec[i+1] - sec[i]));   //因为是有序数组,不用求abs
        }
        return minnum;


    }

501.二叉搜索树中的众数

看完想法:众数是在一组 数据 中,出现次数最多的数据,是一组数据中的原数据,而不是相应的次数。 一组数据中的众数不止一个,如数据2、3、-1、2、1、3中,2、3都出现了两次,它们都是这组数据中的众数。

这里提高一下难度,分不是二叉搜索树和是二叉搜索树的情况。

如果树是二叉搜索树,就可以只在树上下功夫了,利用中序遍历

void searchBST(TreeNode* root, unordered_map<int, int>& map){
        if(root == nullptr) return ;
        map[root->val]++;
        searchBST(root->left, map);
        searchBST(root->right, map);
    }

    bool static cmp(const pair<int, int>& a, const pair<int, int>& b){
        return a.second > b.second;
    }




public:

    vector<int> findMode(TreeNode* root) {
        //由于在private中没有定义全局变量map,所以在public中要定义一次map
        vector<int> result;
        if(root == nullptr) return result;
        unordered_map<int, int> map;
        searchBST(root, map);
        //用map统计出来了出现频率,但map不能直接对value统计,要转化为vecotr
        vector<pair<int, int>> vec(map.begin(), map.end());
        sort(vec.begin(), vec.end(), cmp);
        for(int i=0; i< vec.size(); i++){
            if(vec[i].second == vec[0].second) result.push_back(vec[i].first);
        }
        return result;

    }

236.二叉树的最近公共祖先

看完想法:这里有一个经常弄错的知识点,如何区分遍历一条边还是遍历一整棵树

TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        if(root ==q || root ==p || root==NULL) return root; //确定终止条件
        //确定单层递归逻辑
        TreeNode* left = lowestCommonAncestor(root->left, p, q);
        TreeNode* right = lowestCommonAncestor(root->right, p, q);
        if(left !=NULL && right!=NULL) return root;
        if(left ==NULL && right!=NULL) return right;
        else if(left !=NULL && right==NULL) return left;
        else return NULL;
        

    }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

el-date-picker选择开始日期的近半年

<el-date-pickerv-model"form[val.key]":type"val.datePickerType || daterange":clearable"val.clearable && true"range-separator"~"start-placeholder"开始日期"end-placeholder"结束日期"style&q…

ETF期权开户流程复杂吗?

ETF期权开户流程复杂吗&#xff1f;对于许多初次接触ETF期权的投资者来说&#xff0c;这个问题可能会让他们感到困惑。实际上&#xff0c;ETF期权开户的流程虽然涉及一些步骤&#xff0c;但只要遵循正确的指引&#xff0c;理解每一步的要求&#xff0c;整个过程并不会显得过于复…

【图像处理与机器视觉】频率域滤波

知识铺垫 复数 CRjI 可以看作复平面上的点&#xff0c;则该复数的坐标为&#xff08;R&#xff0c;I&#xff09; 欧拉公式 e j θ c o s θ j s i n θ e^{j\theta} cos \theta j sin \theta ejθcosθjsinθ 极坐标系中复数可以表示为&#xff1a; C ∣ C ∣ ( c o s…

安徽京准NTP时钟系统:GPS北斗卫星授时下的生活重塑

安徽京准NTP时钟系统&#xff1a;GPS北斗卫星授时下的生活重塑 安徽京准NTP时钟系统&#xff1a;GPS北斗卫星授时下的生活重塑 时间的流逝自古以来时钟都是人类生活与活动的基础。然而&#xff0c;随着科技的进步&#xff0c;我们对时间管理和测量的方法已经发生了翻天覆地的变…

0603《哎选》已经稳定运行2年

0603《哎选》已经稳定运行2年 0603《哎选》已经稳定运行2年 介绍 2022年6月3日经过一年的努力&#xff0c;优雅草蜻蜓G系统原生版诞生&#xff0c;本产品应用于《哎选》&#xff0c;经过2年的运营不断的更新迭代&#xff0c;目前产品已经有了一定的用户量&#xff0c;本产品…

毕业论文轻松写:AI写作工具如何助你一臂之力?

时间过的好快&#xff0c;马上又到了一年一度的毕业季了&#xff0c;对于即将毕业的学生来说毕业论文是一道难过的坎&#xff0c;想到自己为了毕业论文熬的夜&#xff0c;掉的头发&#xff0c;真的深有感触。 不过虽然翟博士给大家的毕业论文设了高门槛&#xff0c;但是随着时…

深度神经网络——什么是梯度下降?

如果对神经网络的训练有所了解&#xff0c;那么很可能已经听说过“梯度下降”这一术语。梯度下降是提升神经网络性能、降低其误差率的主要技术手段。然而&#xff0c;对于机器学习新手来说&#xff0c;梯度下降的概念可能稍显晦涩。本文旨在帮助您直观理解梯度下降的工作原理。…

【C#】类和结构体的区别

目录 1.区别概述 ​编辑 2.细节区别 3.结构体的特别之处 4.如何选择结构体和类 1.区别概述 结构体和类的最大区别是在存储空间上&#xff0c;前者是值类型&#xff0c;存储在栈上&#xff0c;后者是引用类型&#xff0c;存储在堆上&#xff0c;它们在赋值上有很大的区别&a…

Windows系统下安装JMeter

大家好&#xff0c;性能测试是现代软件开发中至关重要的一环&#xff0c;它能够帮助开发人员评估系统在不同负载条件下的稳定性和性能表现。而Apache JMeter作为一款功能强大的性能测试工具&#xff0c;广泛被业界采用。如果您正在Windows系统下寻求一种可靠的性能测试工具&…

引领未来,ArmSoM-Sige5震撼发布:RK3576芯片搭载,多媒体应用新宠

在数字化浪潮的推动下&#xff0c;ArmSoM-Sige5携手Rockchip RK3576第二代8纳米高性能AIOT平台&#xff0c;以颠覆性的性能和多功能性&#xff0c;成为多媒体应用的新宠儿。这一全新产品不仅拥有6 TOPS算力NPU和最大可配16GB大内存&#xff0c;更支持4K视频编解码&#xff0c;具…

Yuan 2.0-M32 是一个基于 Yuan 2.0 架构的双语混合专家 (MoE) 语言模型,旨在以更少的参数和计算量实现更高的准确率

主要创新点&#xff1a; 注意力路由器 (Attention Router): 提出了一种新的路由器网络&#xff0c;考虑了专家之间的相关性&#xff0c;从而提高了模型的准确率。高效计算&#xff1a; 使用 MoE 架构&#xff0c;40B 总参数中仅有 3.7B 激活参数&#xff0c;训练计算消耗仅为同…

串口控制小车和小车PWM调速

1.串口控制小车 1. 串口分文件编程进行代码整合&#xff0c;通过现象来改代码 2.接入蓝牙模块&#xff0c;通过蓝牙控制小车 3.添加点动控制&#xff0c;如果APP支持按下一直发数据&#xff0c;松开就停止发数据&#xff08;蓝牙调试助手的自定义按键不能实现&#xff09;&…

fastadmin批量导入

表的字段必须备注清楚导出的excel表头必须对应上如果mysql表有约束&#xff0c;导入会自动限制&#xff0c;挺方便的一个功能。

STM32-14-FSMC_LCD

STM32-01-认识单片机 STM32-02-基础知识 STM32-03-HAL库 STM32-04-时钟树 STM32-05-SYSTEM文件夹 STM32-06-GPIO STM32-07-外部中断 STM32-08-串口 STM32-09-IWDG和WWDG STM32-10-定时器 STM32-11-电容触摸按键 STM32-12-OLED模块 STM32-13-MPU 文章目录 1. 显示器分类2. LCD简…

R语言探索与分析-股票题目

Value at Risk&#xff08;VaR&#xff09;是一种统计技术&#xff0c;用于量化投资组合在正常市场条件下可能遭受的最大潜在损失。它是风险管理和金融领域中一个非常重要的概念。VaR通常以货币单位表示&#xff0c;用于估计在给定的置信水平和特定时间范围内&#xff0c;投资组…

深度剖析云边对接技术:探索开放API接口的价值与意义

在当今数字化时代的浪潮中&#xff0c;云边对接与开放API接口成为了塑造行业生态的重要驱动力。随着云计算、物联网和边缘计算等技术的快速发展&#xff0c;传统产业正在迈向数字化转型的关键时刻。而在这个过程中&#xff0c;云边对接技术以及开放的应用程序接口(API)扮演着举…

最新张量补全论文收集【8篇】

目录 1、利用张量子空间先验&#xff1a;增强张量补全的核范数最小化和 2、基于可学习空间光谱变换的张量核范数多维视觉数据恢复 3、用于图像补全的增强型低秩和稀疏 Tucker 分解 4、多模态核心张量分解及其在低秩张量补全中的应用 5、 低秩张量环的噪声张量补全 6、 视…

MYSQL ORDER BY

在MySQL中&#xff0c;默认情况下&#xff0c;升序排序会将NULL值放在前面&#xff0c;因为在排序过程中&#xff0c;NULL会被视为最小值。然而&#xff0c;有时会要求在升序排序中需要将NULL值放在最后。 例如根据日期升序时就会出现这种问题 方案一&#xff1a; SELECT sor…

微服务学习Day8-Sentinel

文章目录 Sentinel雪崩问题服务保护框架Sentinel配置 限流规则快速入门流控模式流控效果热点参数限流 隔离和降级FeignClient整合Sentinel线程隔离&#xff08;舱壁模式&#xff09;熔断降级 授权规则及规则持久化授权规则自定义异常结果持久化 Sentinel 雪崩问题 服务保护框架…

【论文阅读——机器人操作】

1. 【2022CoRL MIT&GOOGLE】MIRA: Mental Imagery for Robotic Affordances 动机 人类能够形成3D场景的心理图像&#xff0c;以支持反事实想象、规划和运动控制。 解决方案 给定一组2D RGB图像&#xff0c;MIRA用nerf构建一致的3D场景表示&#xff0c;通过该表示合成新的…