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

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

题目链接:

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

学习前:

思路:

对于二叉搜索树,root不为空时与p和q的关系有4种,分别对应返回

  1. root<p && root<q----递归调用右孩子
  2. rootp || rootq----return root
  3. root在p、q之间----return root
  4. root>p && root>q----递归调用左孩子

2和3可以合并,采用中序遍历,实现递归和迭代的方式

学习后:

加深理解

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

题目链接:

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

学习前:

思路:

找到空结点,然后插入

  • 当该节点是空结点时,返回目标值的新结点
  • 当该节点值大于目标值,若左孩子不为空,递归调用左孩子;若左孩子为空,构造新节点并赋值给左孩子
  • 当该节点值小于目标值,若右孩子不为空,递归调用右孩子;若右孩子为空,构造新节点并赋值给右孩子

学习后:

进一步优化。直接利用函数的返回值,当该节点值大于目标值,递归调用传入该结点的左孩子,右孩子同理

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

题目链接:

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

学习前:

思路:

难点在于找到的节点的左右孩子均不为空,思路是将该节点右孩子的最左孩子节点替换成该节点,但操作起来有点困难

学习后:

  • 当找到节点的左右孩子均不为空时,将左子树直接作为右孩子最左孩子结点的左子树
  • 学习前的思路是针对普通二叉树的思想,对于二叉搜索树,可以利用其特性简化操作

四、学习总结

  1. 时间:2.5h
  2. 二叉搜索树的特性,可以从根节点往叶子节点遍历,根据节点值可以只遍历左子树或右子树
posted @   amulet  阅读(3)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示