当前位置: 首页 > news >正文

【leetcode刷刷】235. 二叉搜索树的最近公共祖先 、701.二叉搜索树中的插入操作 、450.删除二叉搜索树中的节点

235. 二叉搜索树的最近公共祖先

class Solution:def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':# 递归if not root: return if root.val == p.val: return pif root.val == q.val: return qleft = Noneright = Noneif root.val > p.val and root.val > q.val: left = self.lowestCommonAncestor(root.left, p, q)elif root.val < p.val and root.val < q.val:right = self.lowestCommonAncestor(root.right, p, q)else:left = self.lowestCommonAncestor(root.left, p, q)right = self.lowestCommonAncestor(root.right, p, q)if left and right: return rootif left: return leftif right: return rightreturn       
  1. 自己写的时候,就是根据二叉树里的查找来写的逻辑,没有想到对于二叉搜索树而言,如果p/q在cur的两边,那么cur就是最近公共节点。想到这一点可以节约很多步骤。
  2. 下面给出了精简版
class Solution:def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':# 递归if not root: return if root.val == p.val: return pif root.val == q.val: return q  # 这个也包括在剩余的情况里?if root.val > p.val and root.val > q.val: left = self.lowestCommonAncestor(root.left, p, q)if left: return leftelif root.val < p.val and root.val < q.val:right = self.lowestCommonAncestor(root.right, p, q)if right: return right# 剩下的就是在两边的,返回root就行。会不会存在两边都为None,那就找不到了,那也是rootreturn root
  1. 但事实上这题用迭代法非常简单,判断条件返回就可以了。但是关键是,知道之前讲的二叉搜索树和最近公共节点的简便判断条件。
class Solution:def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':# 迭代法cur = rootwhile(cur):if cur.val < p.val and cur.val < q.val: cur = cur.rightelif cur.val > p.val and cur.val > q.val:cur = cur.leftelse:return cur

701.二叉搜索树中的插入操作

  1. 一个简单的定义题?根据大小判断一下,保留前一个的指针,再插入就行
class Solution:def insertIntoBST(self, root: Optional[TreeNode], val: int) -> Optional[TreeNode]:# 二叉搜索树的插入if not root:return TreeNode(val)pre = Nonecur = rootwhile(cur):if val < cur.val:pre = curcur = cur.leftelse:pre = curcur = cur.rightprint(pre.val)if val < pre.val: pre.left = TreeNode(val)else:pre.right = TreeNode(val)return root
  1. 用递归法也可以。大概想法就是如果小于cur,就递归左边,大于就递归右边,None的时候返回新节点就行。这样就不用pre来记录前一个了。
class Solution:def insertIntoBST(self, root, val):if root is None:node = TreeNode(val)return nodeif root.val > val:root.left = self.insertIntoBST(root.left, val)if root.val < val:root.right = self.insertIntoBST(root.right, val)return root

450.删除二叉搜索树中的节点

  1. 脑袋已经递归晕了
class Solution:def deleteNode(self, root: Optional[TreeNode], key: int) -> Optional[TreeNode]:if not root:return root# 应该把删除节点的右节点的最左子节点提上来if root.val == key:if not root.left and not root.right:return Noneelif not root.left: return root.rightelif not root.right: return root.leftelse:cur = root.rightwhile cur.left is not None:cur = cur.leftcur.left = root.leftreturn root.rightelif root.val < key:root.right = self.deleteNode(root.right, key)else: # print(root.val)root.left = self.deleteNode(root.left, key)return root

相关文章:

【leetcode刷刷】235. 二叉搜索树的最近公共祖先 、701.二叉搜索树中的插入操作 、450.删除二叉搜索树中的节点

235. 二叉搜索树的最近公共祖先 class Solution:def lowestCommonAncestor(self, root: TreeNode, p: TreeNode, q: TreeNode) -> TreeNode:# 递归if not root: return if root.val p.val: return pif root.val q.val: return qleft Noneright Noneif root.val > p.…...

YoloV8改进策略:BackBone改进|DCNv4最新实践|高效涨点|多种改进教程|完整论文翻译

摘要 涨点效果:在我自己的数据集上,mAP50 由0.986涨到了0.993,mAP50-95由0.737涨到0.77,涨点明显! DCNv4是可变形卷积的第四版,速度和v3相比有了大幅度的提升,但是环境搭建有一定的难度,对新手不太友好。如果在使用过程遇到编译的问题,请严格按照我写的环境配置。 …...

高中数学常识

一、大小关系 |x| > |sinx| 理由&#xff1a; 很明显&#xff0c;在圆内&#xff0c;弧长x>垂线sinx 3x、2x 、 1 2 \frac{1}{2} 21​x 理由&#xff1a; log 1 2 _\frac{1}{2} 21​​x、log 2 _2 2​x、 log 3 _3 3​x 二、(xy)? 的求法 利用二项式定理 三、平…...

docker之部署青龙面板

青龙面板是一个用于管理和监控 Linux 服务器的工具&#xff0c;具有定时运行脚本任务的功能。在实际情况下也可以用于一些定期自动签到等任务脚本的运行。 本次记录下简单的安装与使用&#xff0c;请提前安装好docker&#xff0c;参考之前的文章。 一、安装部署 1、拉取镜像 # …...

Type-C平板接口协议芯片介绍,实现单C口充放电功能

在现代平板电脑中&#xff0c;Type-C接口已经成为了一个非常常见的接口类型。相比于传统的USB接口&#xff0c;Type-C接口具有更小的体积、更快的传输速度和更方便的插拔体验。但是&#xff0c;在使用Type-C接口的平板电脑上&#xff0c;如何实现单C口充电、放电和USB2.0数据传…...

系统架构演变

1.1系统架构的演变 2008年以后&#xff0c;国内互联网行业飞速发展&#xff0c;我们对软件系统的需求已经不再是过去”能用就行”这种很low的档次了&#xff0c;像抢红包、双十一这样的活动不断逼迫我们去突破软件系统的性能上限&#xff0c;传统的IT企业”能用就行”的开发思…...

Oracle PL/SQL Programming 第2章:Creating and Running PL/SQL Code 读书笔记

总的目录和进度&#xff0c;请参见开始读 Oracle PL/SQL Programming 第6版 暂不考虑系统设计或单元测试之类的任务&#xff0c;所有 PL/SQL 程序员必须熟悉的基本操作任务包括&#xff1a; 浏览数据库创建和编辑 PL/SQL 源代码编译 PL/SQL 源代码&#xff0c;并更正编译器注…...

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Swiper容器组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之Swiper容器组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Swiper容器组件 滑块视图容器&#xff0c;提供子组件滑动轮播显示的能力。…...

『建议收藏』OpenAI官方出的Prompt提示词教程中文版来了!

一些结论 六大策略: 写清晰的指令 提供参考文本 将复杂任务分解为更简单的子任务 给模型时间“思考” 使用外部工具 系统性测试变化 提高结果质量的六大策略 写清晰的指令 这些模型无法读懂你的想法。如果输出过长&#xff0c;要求简短回复&#xff1b;如果输出过于简单…...

牛刀小试 - C++ 推箱子小游戏

参考文档 C笔记&#xff1a;推箱子小游戏 copy函数 memcpy()函数用法&#xff08;可复制数组&#xff09; 使用memcpy踩出来的坑&#xff0c;值得注意 完整代码 /********************************************************************* 程序名:推箱子小游戏 说明&#x…...

手机视频压缩怎么压缩?一键瘦身~

现在手机已经成为我们日常生活中必不可少的工具&#xff0c;而在手机的应用领域中&#xff0c;文件的传输和存储是一个非常重要的问题。很多用户都会遇到这样一个问题&#xff0c;那就是在手机上存储的文件太多太大&#xff0c;导致手机存储空间不足&#xff0c;那么怎么在手机…...

目标主力能源:华为智能光伏的时代指南针

让新能源成为人类主要的能源来源&#xff0c;是实现“双碳目标”的核心方案。而光伏能源则是目前新能源体系中的主要选择之一。以光伏为核心构建新型电力系统&#xff0c;让光伏能源成为主力能源值得关注和期待。 过去几年&#xff0c;光伏能源极速发展。但如何百尺竿头更进一步…...

每日一题 力扣2846 边权重均等查询

2846. 边权重均等查询 题目描述&#xff1a; 现有一棵由 n 个节点组成的无向树&#xff0c;节点按从 0 到 n - 1 编号。给你一个整数 n 和一个长度为 n - 1 的二维整数数组 edges &#xff0c;其中 edges[i] [ui, vi, wi] 表示树中存在一条位于节点 ui 和节点 vi 之间、权重…...

【Docker】Docker学习⑨ - 单机编排之Docker Compose

【Docker】Docker学习⑨ - 单机编排之Docker Compose 一、Docker简介二、Docker安装及基础命令介绍三、Docker镜像管理四、Docker镜像与制作五、Docker数据管理六、网络部分七、Docker仓库之单机Dokcer Registry八、Docker仓库之分布式Harbor九、单机编排之Docker Compose1 基础…...

ES6笔记-symbol

ES6 symbol 是什么 ES5的对象属性名是字符串&#xff0c;这容易造成属性名的冲突。symbol是一种机制&#xff0c;保证每个属性的名字都是独一无二的。这样就从根本上防止属性名冲突。 它是一种原始数据类型Symbol,表示独一无二的值。它属于javaScript语言的原生数据类型之一。…...

C++设计模式介绍:优雅编程的艺术

物以类聚 人以群分 文章目录 简介为什么有设计模式&#xff1f; 设计模式七大原则单一职责原则&#xff08;Single Responsibility Principle - SRP&#xff09;开放封闭原则&#xff08;Open/Closed Principle - OCP&#xff09;里氏替换原则&#xff08;Liskov Substitution …...

GitLab升级版本(任意用户密码重置漏洞CVE-2023-7028)

目录 前言漏洞分析影响范围查看自己的GitLab版本升级路程 升级过程13.1.1113.8.8 - 14.0.1214.3.614.9.5 - 16.1.6 前言 最近GitLab发了个紧急漏洞需要修复&#xff0c;ok接到命令立刻着手开始修复&#xff0c;在修复之前先大概了解一下这个漏洞是什么东西 漏洞分析 1、组件…...

Unity——八叉树的原理与实现

八叉树原理 八叉树&#xff08;Octree&#xff09;是一种用于在三维空间中进行空间分割的数据结构。它将三维空间递归地划分为八个子空间&#xff0c;每个子空间对应于一个八叉树节点。这种分割方式可以有效地组织和管理场景中的对象&#xff0c;提高检索效率&#xff0c;特别…...

android 自定义软键盘的显示和隐藏

记一下,以后不用找在InputMethodService中有这两个方法可以看到软键盘显示状态 //软键盘隐藏 override fun onWindowHidden() {super.onWindowHidden() } //软键盘显示 override fun onWindowShown() {super.onWindowShown() } 在activity中可以通过这种方法看到软键盘显示状…...

基于openssl v3搭建ssl安全加固的c++ tcpserver

1 概述 tcp server和tcp client同时使用openssl库&#xff0c;可对通信双方流通的字节序列进行加解密&#xff0c;保障通信的安全。本文以c编写的tcp server和tcp client为例子&#xff0c;openssl的版本为v3。 2 安装openssl v3 2.1 安装 perl-IPC-Cmd openssl项目中的co…...

AI工程化实战:从模型到服务的全链路部署与优化指南

1. 项目概述&#xff1a;一个面向AI应用开发的综合框架最近在开源社区里&#xff0c;Sunpeak-AI/sunpeak 这个项目引起了我的注意。它不是一个单一的模型或工具&#xff0c;而是一个旨在为AI应用开发提供“一站式”解决方案的框架。简单来说&#xff0c;你可以把它理解为一个工…...

AI手机新突破!端侧智能体提速1.6倍,纯软件框架

AI助理正在加速走进我们的手机和电脑&#xff0c;帮我们自动回复邮件、安排会议日程。人们总是希望这些助理不仅聪明&#xff0c;还能把数据留在本地以保护隐私。但现有的端侧设备运行这些大模型智能体时&#xff0c;往往慢得让人失去耐心。由韩国科学技术院&#xff08;KAIST&…...

别再只盯着PCA了!用Python手写LDA降维,实战区分鸢尾花数据集

别再只盯着PCA了&#xff01;用Python手写LDA降维&#xff0c;实战区分鸢尾花数据集 当数据科学家面对高维数据时&#xff0c;降维技术就像一把瑞士军刀。虽然主成分分析(PCA)几乎成了降维的代名词&#xff0c;但在分类任务中&#xff0c;线性判别分析(LDA)往往能带来意想不到的…...

ARM指令集MOV与RRX操作详解

1. ARM指令集基础与MOV指令概述在嵌入式系统和移动计算领域&#xff0c;ARM架构凭借其精简指令集(RISC)设计占据了主导地位。作为程序员或系统开发者&#xff0c;理解ARM指令集的工作原理至关重要。MOV(数据移动)指令作为最基础的数据传输指令&#xff0c;其看似简单的表面下隐…...

【限时解密】Midjourney v7未公开API接口、本地化提示缓存机制与企业级批量生图工作流(仅剩最后87份技术白皮书配额)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney v7新功能详解 Midjourney v7 于2024年中正式发布&#xff0c;标志着AI图像生成在语义理解、细节还原与跨模态一致性方面迈入新阶段。本次升级并非简单参数调优&#xff0c;而是底层扩散架构…...

构建供应链韧性:从元器件选型到灾难预备的工程实践

1. 项目概述&#xff1a;当灾难来敲门&#xff0c;你的供应商准备好了吗&#xff1f;前几天&#xff0c;我所在的城市经历了一场不大不小的风暴。断电十几个小时&#xff0c;家里只能靠几支强光手电筒照亮。在一片昏黄的光线下&#xff0c;没法工作&#xff0c;也没法阅读&…...

基于GPT的学术论文智能阅读工具:ChatGPT-Paper-Reader实战指南

1. 项目概述与核心价值如果你和我一样&#xff0c;经常需要阅读大量的学术论文&#xff0c;尤其是那些动辄十几页、公式图表密布的PDF文件&#xff0c;那你一定体会过那种“望文生畏”的感觉。一篇论文的核心创新点、实验细节、数据对比&#xff0c;往往散落在各个章节&#xf…...

3个步骤让你在Blender中实现CAD级精确建模:告别自由建模的烦恼

3个步骤让你在Blender中实现CAD级精确建模&#xff1a;告别自由建模的烦恼 【免费下载链接】CAD_Sketcher Constraint-based geometry sketcher for blender 项目地址: https://gitcode.com/gh_mirrors/ca/CAD_Sketcher 你是否曾在Blender中为绘制精确尺寸的机械零件而烦…...

电角度测量实战:从理论到示波器波形解析

1. 电角度基础概念解析 第一次接触电机控制时&#xff0c;听到"电角度"这个词确实有点懵。后来在实际项目中才发现&#xff0c;这个概念对理解FOC控制至关重要。简单来说&#xff0c;电角度就是电机磁场旋转时&#xff0c;转子磁极与定子绕组之间的相对位置关系。它和…...

别再滥用虚函数了!用CRTP(奇异递归模板模式)在C++里实现零开销的静态多态

用CRTP重构C性能关键路径&#xff1a;从虚函数到零开销抽象的艺术 在游戏引擎开发中&#xff0c;当处理成千上万的实体渲染调用时&#xff0c;每个虚函数调用都可能成为性能瓶颈。某次性能分析显示&#xff0c;一个简单的Render()虚函数调用在热路径上消耗了超过15%的CPU周期—…...