当前位置: 首页 > 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
http://www.lryc.cn/news/289164.html

相关文章:

  • YoloV8改进策略:BackBone改进|DCNv4最新实践|高效涨点|多种改进教程|完整论文翻译
  • 高中数学常识
  • docker之部署青龙面板
  • Type-C平板接口协议芯片介绍,实现单C口充放电功能
  • 系统架构演变
  • Oracle PL/SQL Programming 第2章:Creating and Running PL/SQL Code 读书笔记
  • 鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Swiper容器组件
  • 『建议收藏』OpenAI官方出的Prompt提示词教程中文版来了!
  • 牛刀小试 - C++ 推箱子小游戏
  • 手机视频压缩怎么压缩?一键瘦身~
  • 目标主力能源:华为智能光伏的时代指南针
  • 每日一题 力扣2846 边权重均等查询
  • 【Docker】Docker学习⑨ - 单机编排之Docker Compose
  • ES6笔记-symbol
  • C++设计模式介绍:优雅编程的艺术
  • GitLab升级版本(任意用户密码重置漏洞CVE-2023-7028)
  • Unity——八叉树的原理与实现
  • android 自定义软键盘的显示和隐藏
  • 基于openssl v3搭建ssl安全加固的c++ tcpserver
  • 11.2 Web开发_CSS入门(❤❤)
  • [docker] Docker的数据卷、数据卷容器,容器互联
  • ATF(TF-A)安全通告TF-V11——恶意的SDEI SMC可能导致越界内存读取(CVE-2023-49100)
  • 如何查找SpringBoot应用中的请求路径(不使用idea)
  • 56. 合并区间 - 力扣(LeetCode)
  • 数据结构篇-03:堆实现优先级队列
  • linux clickhouse 安装
  • 【游戏客户端开发的进阶路线】
  • vue3+naiveUI二次封装的v-model 联动输入框
  • 百度Apollo | 实车自动驾驶:感知、决策、执行的无缝融合
  • DAY31:贪心算法入门455、53、376