算法第十八天|530. 二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先

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

题目

在这里插入图片描述

思路与解法

第一想法: 一个二叉搜索树的最小绝对差,从根结点看,它的结点与它的最小差值一定出现在 左子树的最右结点(左子树最大值)和右子树的最左结点(右子树的最小值)。
这样搞复杂了,直接层序遍历,然后后值减前值,记录最小值

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def getMinimumDifference(self, root: Optional[TreeNode]) -> int:self.inorder_list = []self.inorder(root)res = float('inf')for i in range(len(self.inorder_list)-1):cur = self.inorder_list[i+1] - self.inorder_list[i]res = cur if cur < res else resreturn resdef inorder(self,root):if not root:returnself.inorder(root.left)self.inorder_list.append(root.val)self.inorder(root.right)

501.二叉搜索树中的众数

题目

在这里插入图片描述

思路与解法

第一想法: 遍历

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def findMode(self, root: Optional[TreeNode]) -> List[int]:from collections import defaultdictclass Solution:def searchBST(self, cur, freq_map):if cur is None:returnfreq_map[cur.val] += 1  # 统计元素频率self.searchBST(cur.left, freq_map)self.searchBST(cur.right, freq_map)def findMode(self, root):freq_map = defaultdict(int)  # key:元素,value:出现频率result = []if root is None:return resultself.searchBST(root, freq_map)max_freq = max(freq_map.values())for key, freq in freq_map.items():if freq == max_freq:result.append(key)return result

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

题目

在这里插入图片描述

思路与解法

carl的讲解: 如果左右都有返回值,那就是它。不可能出现第二个左右都有返回值的节点,因为本题树中节点不重复。

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = Noneclass Solution:def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':if root == p or root == q or root == None:return rootleft = self.lowestCommonAncestor(root.left, p, q)right = self.lowestCommonAncestor(root.right, p, q)if left and right:return rootif not left and right:return rightelif left and not right:return leftelse:return None

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

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

相关文章

Nginx 动静分离在 ZKmall 开源商城静态资源管理中的深度优化

在 B2C 电商高并发场景下&#xff0c;静态资源&#xff08;图片、CSS、JavaScript 等&#xff09;的高效管理直接影响页面加载速度与用户体验。ZKmall开源商城通过对 Nginx 动静分离技术的深度优化&#xff0c;将静态资源响应速度提升 65%&#xff0c;带宽成本降低 40%&#xf…

PostgREST:无需后端 快速构建RESTful API服务

在现代 Web 开发中&#xff0c;API 已成为连接前后端的核心桥梁&#xff0c;传统的做法是通过后端框架来构建API接口&#xff0c;然后由前后端人员进行联调。 PostgREST是基于无服务器的一种实现方案&#xff0c;允许开发者将PostgreSQL数据库直接暴露为RESTful API&#xff0…

MySQL——九、锁

分类 全局锁表级锁行级锁 全局锁 做全库的逻辑备份 flush tables with read lock; unlock tables;在InnoDB引擎中&#xff0c;我们可以在备份时加上参数–single-transaction参数来完成不加锁的一致性数据备份 mysqldump --single-transaction -uroot -p123456 itcast>…

基于 Kubernetes 部署容器平台kubesphere

一 前言&#xff1a; k8s 大家都已经非常熟悉了&#xff0c;网上流传着非常多的搭建部署文档&#xff0c;有kubeadmin的有二进制的&#xff0c;还有基于第三方的部署工具的&#xff0c;反正是各种部署方法都有&#xff0c;k8s部署技术热门可见一斑。但是不管哪种部署都需要了解…

RDD算子-行为算子

RDD 算子探秘&#xff1a;行为算子的深度解析与实战应用​ 在 Spark 的 RDD 编程模型中&#xff0c;转换算子负责构建数据处理的逻辑流程&#xff0c;但真正触发计算并产生最终结果的是行为算子&#xff08;Action Operators&#xff09;。与转换算子的惰性求值特性不同&#…

Oracle — PL-SQL

介绍 Oracle PL/SQL是专为Oracle数据库设计的过程化编程语言&#xff0c;深度融合SQL语句与结构化编程逻辑&#xff0c;旨在高效处理复杂数据操作与业务规则。其核心特征为“块结构”&#xff0c;程序由声明、执行、异常处理三部分组成&#xff0c;支持模块化开发&#xff0c;显…

高防ip支持哪些网络协议

高防IP通常支持多种网络协议&#xff0c;以提供全面的网络安全防护。以下是一些主要支持的网络协议及其相关说明&#xff1a; TCP协议&#xff08;传输控制协议&#xff09;&#xff1a; TCP协议是最常见的传输协议&#xff0c;广泛应用于互联网通信。高防IP通过对TCP协议的防…

Flutter基础()

导航栏 appBar: AppBar() title: const Text(搜索) //标题 backgroundColor: Colors.blue //背景颜色 centerTitle: true //标题居中leading 属性 作用&#xff1a; 放置在应用栏左侧的控件&#xff0c;通常是一个图标按钮&#xff0c;用于导航或打开菜单。 AppBar(le…

ESP系列单片机选择指南:结合实际场景的最优选择方案

前言 在物联网(IoT)快速发展的今天&#xff0c;ESP系列单片机凭借其优异的无线连接能力和丰富的功能特性&#xff0c;已成为智能家居、智慧农业、工业自动化等领域的首选方案。本文将深入分析各款ESP芯片的特点&#xff0c;结合典型应用场景&#xff0c;帮助开发者做出最优选择…

搭建Caffeine+Redis多级缓存机制

本地缓存的简单实现方案有HashMap&#xff0c;CucurrentHashMap&#xff0c;成熟的本地缓存方案有Guava 与 Caffeine &#xff0c;企业级应用推荐下面说下两者的区别 1. 核心异同对比 特性Guava CacheCaffeine诞生背景Google Guava 库的一部分&#xff08;2011年&#xff09;…

【Linux系统】第四节—详解yum+vim

hello 我是云边有个稻草人 Linux—本节课所属专栏—欢迎订阅—持续更新中~ 目录 画板—本节课知识点详解 一、软件包管理器 1.1 什么是软件包 1.2 Linux软件⽣态 1.3 yum具体操作 【查看软件包】 【安装软件】 【卸载软件】 【注意事项】 1.4 安装源 二、vim 2.1 …

EasyRTC嵌入式音视频通信SDK打造带屏IPC全场景实时通信解决方案

一、方案概述​ 在智能安防与物联网快速发展的背景下&#xff0c;带屏IPC&#xff08;网络摄像机&#xff09;不仅承担着视频采集与监控的基础功能&#xff0c;还逐渐向多样化交互与智能化方向演进。EasyRTC作为一款强大的实时通信框架&#xff0c;具备低延迟、高稳定性、跨平…

Linux下的c/c++开发之操作Redis数据库

C/C 操作 Redis 的常用库 在 C/C 开发中操作 Redis 有多种方式&#xff0c;最主流的选择是使用第三方客户端库。由于 Redis 官方本身是使用 C 编写的&#xff0c;提供的 API 非常适合 C/C 调用。常见的 Redis C/C 客户端库包括&#xff1a; hiredis&#xff1a;官方推荐的轻量…

go 通过汇编学习atomic原子操作原理

文章目录 概要一、原理1.1、案例1.2、关键汇编 二、LOCK汇编指令2.1、 LOCK2.2、 原理2.2.1、 缓存行2.2.2、 缓存一致性之MESI协议2.2.3、lock原理 三、x86缓存发展四、x86 DMA发展参考 概要 在并发操作下&#xff0c;对一个简单的aa2的操作都会出错&#xff0c;这是因为这样…

mapreduce打包运行

maven打包 MapReduce是一个分布式运算程序的编程框架&#xff0c;是用户开发“基于Hadoop的数据分析应用”的核心框架。 MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序&#xff08;例如&#xff1a;jar包&#xff09;&#xff0…

小白成长之路-LInux系统文件与目录管理(二)

提示&#xff1a;第二部分对第一部分收尾 文章目录 常见的命令如下一、文件查看命令1. more命令2.less命令3.head命令4.tail命令5.nl命令&#xff08;了解&#xff09;6.创建目录命令7.创建文件命令>: 覆盖重定向>>: 追加重定向 8.touch命令9.echo命令10.文件或目录复…

JVM之虚拟机运行

虚拟机运行快速复习 try-catch&#xff1a;catch-异常表栈展开&#xff0c;finally-代码复制异常表兜底 类的生命周期&#xff1a;加载&#xff0c;连接&#xff08;验证&#xff0c;准备&#xff0c;解析&#xff09;&#xff0c;初始化&#xff0c;使用&#xff0c;卸载 类…

AI数字人实现原理

随着人工智能与数字技术的快速发展&#xff0c;AI数字人&#xff08;Digital Human&#xff09;作为新一代人机交互媒介&#xff0c;正在多个行业中快速落地。无论是在虚拟主播、在线客服、教育培训&#xff0c;还是在数字代言、元宇宙中&#xff0c;AI数字人都扮演着越来越重要…

Android开发-数据库SQLite

在Android应用开发中&#xff0c;当需要存储结构化数据时&#xff0c;SQLite是一个非常强大的工具。SQLite是一款轻量级的关系型数据库管理系统&#xff0c;它内嵌于Android系统中&#xff0c;支持SQL语法&#xff0c;并且不需要单独的服务器进程或系统配置。本文将介绍如何在A…

android实现USB通讯

在 Android 上枚举 USB 设备除了使用 UsbManager.getDeviceList() 方法外&#xff0c;还有以下几种常见的方式&#xff1a; 1. 使用 USB 设备过滤器&#xff08;XML 配置&#xff09; 通过在 AndroidManifest.xml 中配置 USB 设备过滤器&#xff0c;可以让系统自动检测并通知…