给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。一般来说,删除节点可分为两个步骤:首先找到需要删除的节点;
如果找到了,删除它。示例 1:输入:root = [5,3,6,2,4,null,7], key = 3
输出:[5,4,6,2,null,null,7]
解释:给定需要删除的节点值是 3,所以我们首先找到 3 这个节点,然后删除它。
一个正确的答案是 [5,4,6,2,null,null,7], 如下图所示。
另一个正确答案是 [5,2,6,null,4,null,7]。示例 2:输入: root = [5,3,6,2,4,null,7], key = 0
输出: [5,3,6,2,4,null,7]
解释: 二叉树不包含值为 0 的节点
示例 3:输入: root = [], key = 0
输出: []# 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 deleteNode(self, root: Optional[TreeNode], key: int) -> Optional[TreeNode]:if root is None:return None# 递归调用左子树if key < root.val:root.left = self.deleteNode(root.left, key)return root# 递归调用右子树if key > root.val:root.right = self.deleteNode(root.right, key)return root# 当前节点的val正好等于key# 当前节点的左子节点不存在,直接提升右子节点即可if root.left is None:new_root = root.rightroot.right = Nonereturn new_root# 当前节点右子节点不存在,直接提升左子节点即可if root.right is None:new_root = root.leftroot.left = Nonereturn new_root# 当前节点的左右子节点均存在,用左子树的最大点替换# 寻找左子树最大的点node = root.leftwhile node.right != None:node = node.right# 左子树最大的点变更为根节点new_root = TreeNode(node.val)# 新的根节点需要左子树需要更新new_root.left = self.removeMax(root.left)# 新的根节点的右子树即为原来的右子树new_root.right = root.rightroot.left = Noneroot.right = Nonereturn new_rootdef removeMax(self, node):if node.right == None:new_root = node.leftnode.left = Nonereturn new_rootnode.right = self.removeMax(node.right)return node

67. Leetcode 450. 删除二叉搜索树中的节点 (二叉搜索树-基本操作类)相关推荐

  1. ​LeetCode刷题实战450:删除二叉搜索树中的节点

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  2. 代码随想录算法训练营第22天 二叉树 java :235. 二叉树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点

    文章目录 LeetCode 236. 二叉树的最近公共祖先 题目讲解 思路 LeetCode 701.二叉搜索树中的插入操作 题目讲解 思路 LeetCode 450.删除二叉搜索树中的节点 题目讲解 ...

  3. 二叉树part8 | ● 235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点

    文章目录 235. 二叉搜索树的最近公共祖先 思路 代码 困难 701.二叉搜索树中的插入操作 思路 代码 450.删除二叉搜索树中的节点 思路 代码 困难 今日收获 235. 二叉搜索树的最近公共祖 ...

  4. LeetCode450题—— 删除二叉搜索树中的节点

    首先需要认识什么是二叉搜索树,可以进入百度词条https://baike.baidu.com/item/%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91/70 ...

  5. java 递归从子节点删除父节点_LeetCode450. 删除二叉搜索树中的节点

    删除一个二叉搜索树中的节点,需要进行情况的分类讨论,看一下将这个节点删除之后是否需要对二叉搜索树进行调整(为了保持树的连接和维持二叉搜索树的性质). (1)如果删除的是一个叶子节点,那问题不大,因为它 ...

  6. leetcode 450. 删除二叉搜索树中的节点 c语言实现

    如题: 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变.返回二叉搜索树(有可能被更新)的根节点的引用. 一般来说,删除节点可 ...

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

    给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变.返回二叉搜索树(有可能被更新)的根节点的引用. 一般来说,删除节点可分为两个 ...

  8. 【数据结构与算法】之深入解析“删除二叉搜索树中的节点”的求解思路与算法示例

    一.题目要求 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变,返回二叉搜索树(有可能被更新)的根节点的引用. 一般来说,删除 ...

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

    给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变.返回二叉搜索树(有可能被更新)的根节点的引用. 一般来说,删除节点可分为两个 ...

最新文章

  1. 《数据科学家养成手册》第九章信息论
  2. Linux入门第四集!Jar包的入门、使用、部署!怎么打Jar包?
  3. Caffe学习系列(16):各层权值参数可视化
  4. 倍增LCA code[vs]1036商务旅行
  5. 看着女朋友的肚子,以肉眼可见的速度大起来......
  6. 计算机多重网络intnet,南昌大学计算机网络实验(全).doc
  7. python人脸对比相似度_相似度算法原理及python实现
  8. OLED原理、时序和操作+自己源码程序
  9. ffmpeg 结合 ASS字幕制作+特效制作
  10. Kindle 2 初探
  11. Koo叔说Shader-CG语言介绍
  12. Android 监听短信2种方式:Broadcast和ContentObserver
  13. 聚合物-化学键-聚合物PEG-Hyd-PDLLA /PLA-PHis-hyd-PEG/PEG-PUSeSe-PEG
  14. 吵翻了!导师确认录取后却被学生放了鸽子,生气之余导师建了个“失信名单”挂到网上
  15. list object has no attribute ZScan_【恋爱体验】No.112丨大二男生,河南南阳,身高178,喜欢篮球、羽毛球、兵乓球、足球.........
  16. RoI Pooling 和 RoI Align
  17. THREEJS辉光与景深特效
  18. 如何让树莓派启动实现图形化界面和命令行模式的切换从而解决两个光标的问题
  19. 参考文献起止页码怎么写_参考文献书写格式
  20. C# office dll引用及生成

热门文章

  1. 安装CentOs 5.5后无法显中文(中文乱码)
  2. Oracle:推迟了的Java Enterprise Edition 8将会在“今年之内”发布
  3. R语言扩展包dplyr——数据清洗和整理
  4. mysql 关于日期时间的字段类型
  5. echarts图表第一个案例
  6. asp:HyperLink vs asp:LinkButton
  7. saltstack实战-6
  8. Sql Server 日志清理 (数据库压缩方法)
  9. PAT甲级1042 Shuffling Machine:[C++题解]模拟、哈希表、洗牌机
  10. PAT甲级1031 Hello World for U:[C++题解]模拟、数学运算