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

目录

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

思路

代码

501.二叉搜索树中的众数

思路

代码

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

思路

代码


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

需要领悟一下二叉树遍历上双指针操作,优先掌握递归 

题目链接/文章讲解:代码随想录

视频讲解:二叉搜索树中,需要掌握如何双指针遍历!| LeetCode:530.二叉搜索树的最小绝对差_哔哩哔哩_bilibili

思路

        二叉搜索树的一个很重要的特性——中序遍历是一个有序的递增数组。有序递增数组求两个数的最小差值那不是有手就行。

代码
class Solution:def __init__(self):self.vec = []def traversal(self, root):if root is None:returnself.traversal(root.left)self.vec.append(root.val)  # 将二叉搜索树转换为有序数组self.traversal(root.right)def getMinimumDifference(self, root):self.vec = []self.traversal(root)if len(self.vec) < 2:return 0result = float('inf')for i in range(1, len(self.vec)):# 统计有序数组的最小差值result = min(result, self.vec[i] - self.vec[i - 1])return result

501.二叉搜索树中的众数

和 530差不多双指针思路,不过 这里涉及到一个很巧妙的代码技巧。

题目链接/文章讲解:代码随想录

代码随想录视频讲解:不仅双指针,还有代码技巧可以惊艳到你! | LeetCode:501.二叉搜索树中的众数_哔哩哔哩_bilibili

思路

       这里首次引入了pre指针,采用的还是二叉树的中序遍历,每次和前一个数进行比较,如果一样,count就+1,每层遍历时在遍历中间节点后更新出现次数最大的数,注意每次更新最大的数需要把原来的res[ ] 清空,因为原来里面装的不是出现频率最大的数了。

代码
from collections import defaultdict
from typing import Optional, Listclass TreeNode:def __init__(self, val=0, left=None, right=None):self.val = valself.left = leftself.right = rightclass Solution:def __init__(self):self.res = []self.count = 0self.maxcount = 0self.pre = Nonedef findMode(self, root: Optional[TreeNode]) -> List[int]:self.count = 0self.maxcount = 0self.pre = Noneself.res = []self.traversal(root)return self.resdef traversal(self, cur):if not cur:return None# 左self.traversal(cur.left)# 中if not self.pre:self.count = 1elif self.pre.val == cur.val:self.count += 1else:self.count = 1self.pre = curif self.count > self.maxcount:  # 当前计数频率大于最大值频率,更新max,清空resself.maxcount = self.countself.res = []if self.count == self.maxcount:self.res.append(cur.val)# 右self.traversal(cur.right)return

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

本题其实是比较难的,可以先看我的视频讲解 

题目链接:

代码随想录

视频讲解:自底向上查找,有点难度! | LeetCode:236. 二叉树的最近公共祖先_哔哩哔哩_bilibili

思路

        这种题就是我看着好像知道什么个原理,实际上让我写写不了一点。。。(每日崩溃1/1)

 这道题使用的是后序遍历,如果遍历到当前节点就是p或者q就返回当前节点,层层往回传,最后会传到根节点。(因为是后序遍历,哪怕找到了答案也要遍完的)(我知道我这么讲大家根本听不懂,所以点开视频看吧,Carl哥讲的超级nice,再配合代码应该可以看懂)

代码
class TreeNode:def __init__(self, x):self.val = xself.left = Noneself.right = Noneclass Solution:def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':if root == p or root == q or root is None:return rootleft = self.lowestCommonAncestor(root.left,p,q)right = self.lowestCommonAncestor(root.right,p,q)if left is not None and right is not None:return rootelif left is None and right is not None :return rightelif left is not None and right is None:return leftelse:return None

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

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

相关文章

Java Spring的定时任务的配置和使用

在Spring框架中&#xff0c;配置和使用定时任务主要涉及Scheduled注解以及Spring的异步任务执行能力。以下是详细步骤&#xff1a; 1. 引入依赖 对于Spring Boot项目&#xff0c;通常已经包含了Spring框架&#xff0c;因此不需要额外添加定时任务的依赖。如果使用的是Spring框…

AI大模型测评系统opencompass源码解析

1 注册器(Registry) 为了管理功能相似的模块,MMEngine实现了注册器。注册器可以被视作这些类或函数的抽象。例如注册器 MODELS 可以被视作所有模型的抽象。 1.1 什么是注册器 MMEngine 实现的注册器可以看作一个映射表和模块构建方法(build function)的组合。 映射表:…

八、e2studio VS STM32CubeIDE之内存使用情况窗口

目录 一、概述/目的 二、STM32CubeIDE Build Analyzer 三、e2studio Memory Usage 八、e2studio VS STM32CubeIDE之内存使用情况窗口 一、概述/目的 1、嵌入开发最大特点之一就是资源受限&#xff0c;关注芯片资源使用详情是优秀工程师的技能之一 2、Keil和IAR都不支持内存…

CTFshow 信息搜集

第一题1 进入靶场 直接看源码发现flag 第二题 1 按右键没办法看源码 按ctrlu可以查看源码 第三题 0 查看源码 发现还是什么都没有 用bp抓包发现flag 第四题1 直接进robots.txt 访问flagishere.txt获得flag 第五题 0 提示了phps源码泄露 用目录扫描工具没扫出来 看wp 发现有…

网络编程套接字详解

目录 1. 预备介绍 2.网络字节序 3.udp网络程序 4.地址转换函数 5.udp网络编程 1.预备介绍 1.1源IP地址和目标IP地址 举个例子: 从北京出发到上海旅游, 那么源IP地址就是北京, 目标IP地址就是上海. 1.2 端口号 作用: 标识一个进程, 告诉OS这个数据交给那个进程来处理; (1)…

Oracle: 一个用户多个表空间处理

1.场景描述 今天工作中&#xff0c;同事说建了一个用户&#xff0c;往里面导入数据时提示表空间不存在&#xff0c;建了表空间后&#xff0c;部分仍然导不进去。期望帮忙创建表空间&#xff0c;并指定默认表空间&#xff0c;成功将数据导入。 &#xff08;1&#xff09;创建好的…

K8s:二进制安装k8s(单台master)

目录 一、安装k8s 1、拓扑图 2、系统初始化配置 2.1关闭防火墙selinx以及swap 2.2设置主机名 2.3在每台主机中添加hosts&#xff0c;做映射 2.4调整内核参数&#xff0c;将桥接的ipv4流量传递到iptables&#xff0c;关闭ipv6 2.4时间同步 3、部署docker引擎&#xff0…

使用LangChain和Neo4j快速创建RAG应用

大家好&#xff0c;Neo4j 通过集成原生的向量搜索功能&#xff0c;增强了其对检索增强生成&#xff08;RAG&#xff09;应用的支持&#xff0c;这标志着一个重要的里程碑。这项新功能通过向量索引搜索处理非结构化文本&#xff0c;增强了 Neo4j 在存储和分析结构化数据方面的现…

go语言map底层及扩容机制原理详解(上)

底层数据结构-哈希表 go语言map的底层数据结构是哈希表&#xff1a;通过哈希表来存储键值对&#xff0c;通过hash函数把键值对散列到一个个桶(bucket)中。 什么是哈希表&#xff1f; 在顺序结构以及平衡树中&#xff0c;元素与其的存储位置之间没有对应关系&#xff0c;因此…

SwiftUI中的@StateObject和@ObservedObject的区别

SwiftUI中的StateObject和ObservedObject属性包装器指示视图更新以响应被观察对象的变化。虽然这两个属性包装器看起来很相似&#xff0c;但在使用SwiftUI构建应用程序时&#xff0c;有一个关键的区别需要理解。 两个属性包装器都要求对象符合ObservableObject协议。这个协议表…

表征和基于结构的蛋白质工程:黄芪特异性皂苷乙酰转移酶-文献精读14

Characterization and structure-based protein engineering of a regiospecific saponin acetyltransferase from Astragalus membranaceus 表征和基于结构的蛋白质工程&#xff1a;黄芪特异性皂苷乙酰转移酶&#xff0c;一篇乙酰基转移酶文章精读分享~ 摘要 乙酰化有助于许…

【C++】继承相关(基类与派生类的继承关系以及细节整理)

目录 00.引言 01.继承的定义 02.基类和派生类对象 03.继承中的作用域 04.派生类的默认成员函数 05.友元、静态成员 00.引言 继承是面向对象编程中的一个重要概念&#xff0c;它的作用是创建一个新的类&#xff0c;该类可以从一个已存在的类&#xff08;父类/基类&#x…

服务攻防——数据库安全

第一步: 端口扫描&#xff1a;nmap 扫不到端口&#xff1a;端口被修改&#xff0c;防护软件&#xff0c;放在内网环境 mysql 内置端口3306 第一种官方漏洞 第一步:先扫描有什么端口开发 用这个错误密码一直访问&#xff0c;最终就进去了 弱口令猜解 不可以直接猜解&#x…

WEB后端复习——MVC、SSM【含登录页面代码】

MVC&#xff08;Model-View-Controller&#xff09;是一种软件设计模式&#xff0c;用于将应用程序分解为三个相互关联的组件&#xff1a;模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;和控制器&#xff08;Controller&#xff09;。这种模式在构建用户…

机器人学导论实验1—CoppeliaSim 平台介绍及初步使用BJTU

1. 实验内容分析 对实验内容的理解及关键点&#xff1a; 理解这个实验的关键点在于理解如何使用CoppeliaSim和MATLAB来控制和操作机器人。需要熟悉这两个工具的基本操作&#xff0c;例如如何加载场景、如何修改机器人参数、如何使用MATLAB客户端程序来控制机器人等。此外&#…

Docker 部署 Prometheus 实现一个极简的 QPS 监控

背景 : Prometheus 是近年来最流行的开源监控框架, 其功能强大且易于使用, 拥有各种主流后端语言(Java/Go/Python/Node.js等)与各种场景(如web handler/ k8s/Nginx/MySQL等)的客户端, 并自带图形化显示页面。分享一个快速入门Prometheus 的教程, 实现一个极简的, 后端开发需要特…

Nginx-基础-基础配置-Location

Location 参数匹配模式 参数匹配方式匹配模式说明注意事项精准匹配普通字符串匹配用于标准uri前&#xff0c;要求请求字符串与uri精准匹配&#xff0c;成功则立即处理&#xff0c;nginx停止搜索其他匹配。~正则匹配正则表达式匹配用于正则uri&#xff0c;表示uri包含正则表达…

使用 Docker 轻松部署 Spring Boot 应用

当今软件开发领域&#xff0c;Docker 和 Spring Boot 的组合已成为开发和部署应用程序的黄金标准。在这篇博客中&#xff0c;我们将详细探讨如何将 Spring Boot 应用容器化并使用 Docker 进行部署&#xff0c;确保你的部署过程既高效又可靠。 引言 Docker 提供了一个标准化的…

基于SSM的理发店会员管理系统的设计和实现(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的理发店会员管理系统的设计和实现&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0…

Docker安装达梦数据库

1.确保已安装Docker 可参考&#xff1a;Linux安装Docker-CSDN博客 2.上传dm镜像并导入安装包 可以从&#xff1a;产品下载 | 达梦数据库下载dm镜像&#xff0c;如下图&#xff1a; docker load -i dm8_20230808.tar 3.导入后查看镜像 docker images 4.启动容器 docker run …