代码随想录第二十一天

代码随想录第二十一天

    • Leetcode 530. 二叉搜索树的最小绝对差
    • Leetcode 501. 二叉搜索树中的众数
    • Leetcode 236. 二叉树的最近公共祖先

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

题目链接: 二叉搜索树的最小绝对差
自己的思路:和验证二叉搜索树一样的思路!可以求每个相邻节点的差值的绝对值,然后和之前的差值的绝对值进行比较,取最小的为新的res;递归三部曲:1、传入参数:当前节点;2、终止条件:如果当前节点为空,直接返回;3、单层递归逻辑:中序遍历!!因为中序遍历可以保证是递增的,这样就不会跳着比较,所以先递归左子树,然后中节点和前一个节点求差值的绝对值和res比较,取最小值为res,然后再定义新的pre,再进行右子树的遍历即可!!!

正确思路:

代码:

class Solution {int res = Integer.MAX_VALUE;TreeNode pre;public int getMinimumDifference(TreeNode root) {if (root==null) return 0;getmin(root);return res;}public void getmin(TreeNode root){if (root==null) return;//左递归getmin(root.left);//求上一个节点和此节点的最小值和之前的差进行比较if (pre!=null){res = Math.min(res,Math.abs(pre.val-root.val));}//重新表示上一个节点pre = root;//右递归getmin(root.right);}
}

复杂度分析
时间复杂度: O ( n ) \mathcal{O}(n) O(n)
空间复杂度: O ( 1 ) \mathcal{O}(1) O(1)

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

题目链接: 二叉搜索树中的众数
自己的思路:没想到!!!!

正确思路:比较笨的方法是遍历两次二叉树,然后找其中最大的值就可以;但是这里是使用了一点代码技巧来处理这个问题,所以使用一次遍历就可以;具体的思路为:二叉搜索树一定是中序遍历!!!!这样可以保证有序,主要是处理中的逻辑,我们可以定义三个变量,count用于存储当前结点的值出现的次数,maxcount用于存储出现的最多的结点出现的次数,pre存储上一个节点;首先是计数阶段:当pre是空的时候,那也就是说node现在是出于叶子节点,记录它的count值为1,当pre的结点值等于node的结点值的时候,说明出现了相同的节点值,则count++,当pre的结点值不等于node的结点值时,说明出现了不同的节点值,重置count为1;然后是加入结果阶段:当count==maxcount的时候,说明当前的次数和最大的次数相同,当前结点值加入到结果集中,如果count>maxcount的时候,说明之前的maxcount并不是全局的最大,所以把之前的res中的所有元素清空,然后再加入新的结果,并且把maxcount赋值为count;递归三部曲:1、传入参数:当前节点;2、终止条件:当当前节点为空的时候,返回;3、单层逻辑:先左递归,然后处理中间节点,然后右递归!!!

代码:

class Solution {List<Integer> res = new ArrayList<>();int count = 0;int maxcount = 0;TreeNode pre;public int[] findMode(TreeNode root) {addMode(root);int [] re = new int[res.size()];for (int i =0;i<re.length;i++){re[i] = res.get(i);}return re;}public void addMode(TreeNode node){if (node==null) return;addMode(node.left);//计数阶段if (pre==null) count=1;else if (pre.val==node.val){count++;}else count=1;//加结果阶段if (count>maxcount){maxcount = count;res.clear();res.add(node.val);}else if (count==maxcount){res.add(node.val);}pre = node;addMode(node.right);}
}

复杂度分析
时间复杂度: O ( n ) \mathcal{O}(n) O(n)
空间复杂度: O ( 1 ) \mathcal{O}(1) O(1)

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

题目链接: 二叉树的最近公共祖先
自己的思路:没想到!!!

正确思路:主要是遍历顺序,使用后序遍历出来,自底向上地返回;递归三部曲:1、传入参数:当前结点、结点p、结点q;2、终止条件:当当前结点是空或者p和q时,直接返回当前结点即可,因为没有比这个更深的结点了;3、单层递归逻辑:先左右递归左右子树查找左右子树分别对p和q的最近公共祖先,得到left和right,如果两个都为空,说明没找到,直接返回null,如果其中一个不为空,另一个为空,说明不为空的那个为最近公共祖先,如果两个都不为空,则当前节点为最近公共祖先!!!
代码:

class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {//如果当前结点就是空或者p和q的话,直接返回当前结点if (root==null||root==p||root==q){return root;}//递归左右子树TreeNode left = lowestCommonAncestor(root.left,p,q);TreeNode right = lowestCommonAncestor(root.right,p,q);//如果左右两边都没有,直接返回nullif (left==null&&right==null) return null;//左边有返回左边,右边有返回右边if (left==null||right==null){return left==null?right:left;}//左右两边都有返回当前结点return root;}
}

复杂度分析
时间复杂度: O ( n ) \mathcal{O}(n) O(n)
空间复杂度: O ( 1 ) \mathcal{O}(1) O(1)

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

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

相关文章

MFC扩展库BCGControlBar Pro v33.5新版亮点 - 其他增强功能

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中&#xff0c;并为您节省数百个开发和调试时间。 BCGControlBar专业版 v33.5已正式发布了&#xff0c;此版本包含了Ribbon&#xff08;功能区&#xff09;自定义…

Ansible自动化运维工具的认识

目录 一、Ansible概述 二、Ansible特点 三、Ansible应用 1、使用者 2、Ansible工具集合 3、作用对象 四、Ansible的搭建 1、实验环境 2、环境准备 Ansible&#xff1a; 3、创建ssh免密交互登录 client端环境准备 五、Ansible配置 六、Ansible命令 1、ansible 实…

【软件测试】web测试bug定位思路总结,“我“不再背锅...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 需要掌握的知识 …

ASUS华硕ROG幻14 2021款GA401QM原厂Win10系统工厂模式带ASUS Recovery恢复功能

自带恢复分区、所有驱动、出厂主题壁纸LOGO、Office办公软件、奥创控制中心等预装程序 所需要工具&#xff1a;16G或以上的U盘(非必需) 文件格式&#xff1a;HDI,SWP,OFS,EDN,KIT,TLK多个底包 文件大小&#xff1a;11.34GB 注&#xff1a;恢复时会清空电脑上所有盘的数据&…

系列七、VMware中的CentOS服务不息屏

一、场景 VMware中安装好CentOS7等虚拟机后&#xff0c;过一段时间会自动息屏&#xff0c;这个时候如果想执行操作&#xff0c;需要重新输入 用户名/密码&#xff0c;体验感不好。 二、解决方法 应用程序》系统工具》设置》Privacy》锁屏》自动锁屏&#xff08;关闭&#xff0…

dcat-admin自定义登录密码hash加密规则

dcat-admin自定义登录密码hash加密规则 1 app/Providers/AuthServiceProvider.php 内配置 CustomUserProvider public function boot(){$this->registerPolicies();Auth::provider(custom, function ($app, array $config) {return new CustomUserProvider();});}2 修改dca…

SpringBoot 统一功能的处理

SpringBoot 统一功能的处理 文章目录 SpringBoot 统一功能的处理1. 用户登录权限校验1.1 最初用户登录验证1.2 Spring AOP 统一用户登录验证的问题1.3 SpringAOP 拦截器1.3.1 实现自定义拦截器1.3.2 将自定义拦截器加入到系统配置 1.4 拦截器实现原理1.4.1 实现流程图1.4.2 实现…

Java 串口通讯 Demo

为什么写这篇文章 之前职业生涯中遇到的都是通过tcp协议与其他设备进行通讯&#xff0c;而这个是通过串口与其他设备进行通讯&#xff0c;意识到这里是承重板的连接&#xff0c;但实际上比如拉力、压力等模拟信号转换成数字信号的设备应该是有相当一大部分是通过这种方式通讯的…

Redis数据结构 — List

目录 链表结构设计 ​编辑链表节点结构设计 链表的优势与缺陷 Redis 的 List 对象的底层实现之一就是链表。C 语言本身没有链表这个数据结构的&#xff0c;所以 Redis 自己设计了一个链表数据结构。 链表结构设计 typedef struct list {//链表头节点listNode *head;//链表…

软件测试人员的基本功包括哪些?

什么是基本功&#xff1f;百度到的结果是&#xff1a;从事某种工作所必需的基本的知识和技能。 推理1&#xff1a;“基本”二字&#xff0c;意味着基本功必定是来源测试工作的基本流程。 推理2&#xff1a;“必须”二字&#xff0c;就意味者无论你是高级的测试开发&#xff0c;…

spring.profiles的使用详解

本文来说下spring.profiles.active和spring.profiles.include的使用与区别 文章目录 业务场景spring.profiles.active属性启动时指定 spring.profiles.include属性配置方法配置位置配置区别 用示例来使用和区分测试一测试二测试三 编写程序查看激活的yml文件本文小结 业务场景 …

TypeScript 学习笔记 环境安装-类型注解-语法细节-类-接口-泛型

文章目录 TypeScript 学习笔记概述TypeScript 开发环境搭建 类型注解类型推断 数据类型JS的7个原始类型Array数组object、Object 和 {}可选属性 ? 和 可选链运算符?. function函数TS类型: any类型 | unknow类型TS类型: void类型TS类型&#xff1a;never类型 &#xff08;几乎…

FFmpeg之音频重采样

为什么要重采样 从设备采集的音频数据与编码器要求的数据不一致扬声器要求的音频数据与要播放的音频数据不一致更方便运算&#xff08;回音消除须使用单声道&#xff0c;需要先转换&#xff09; 比如说语音识别&#xff0c;需要很低的采样率就可以了&#xff0c;高了增加了数…

noSQL的小练习

目录 Redis&#xff1a; 1、 string类型数据的命令操作&#xff1a; 2、 list类型数据的命令操作&#xff1a; 3、 hash类型数据的命令操作&#xff1a; MongoDB&#xff1a; 1. 创建一个数据库 名字grade 2. 数据库中创建一个集合名字 class 3. 集合中插入若…

C++基础算法二分篇

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;C算法 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 主要讲解二分算法&#xff0c;分别讲解了整数二分和浮点二分 文章目录…

MobPush:Android SDK 集成指南

开发工具&#xff1a;Android Studio 集成方式&#xff1a;Gradle在线集成 安卓版本支持&#xff1a;minSdkVersion 19 集成准备 注册账号 使用PushSDK之前&#xff0c;需要先在MobTech官网注册开发者账号&#xff0c;并获取MobTech提供的AppKey和AppSecret&#xff0c;详情可…

elasticsearch基本操作

elasticsearch 下面参数详细解释 java 搜索查询看官方文档 https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/8.8/connecting.html#_your_first_request{"name" : "Tom Foster","cluster_name" : "elasticsearch&q…

【Linux】分布式存储系统 Ceph应用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 分布式存储系统 Ceph应用 创建 CephFS 文件系统 MDS 接口创建 Ceph 块存储系统 RBD 接口创建 Ceph 对象存储系统 RGW 接口OSD 故障模拟与恢复 创建 CephFS 文件系统 MDS 接口…

vue3+vite+ts+vant 开发浙里办H5应用流程和注意事项

vue3vitets 开发浙里办H5应用流程和注意事项 最近有个项目是要开发到浙里办的一个H5项目,记录一些问题; 浙里办irs系统内node版本和npm版本如下建议切到他们的版本再进行开发这样问题少一点 1.因为浙里办有自己的irs系统 需要吧前端整体的代码传上去 除了 打包后的dist 和 no…

【Win10系统下载Python3】

Python3官网&#xff1a;https://www.python.org/downloads/windows/ 注