450. 删除二叉搜索树中的节点
| 2024-3-4
0  |  阅读时长 0 分钟
From
Leetcode
Status
AC
Date
Mar 4, 2024
Tags
二叉搜索树
Difficulty
中等

题面

给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。
一般来说,删除节点可分为两个步骤:
  1. 首先找到需要删除的节点;
  1. 如果找到了,删除它。
示例 1:
notion image
notion image
示例 2:
示例 3:
提示:
  • 节点数的范围 [0, 104].
  • 105 <= Node.val <= 105
  • 节点值唯一
  • root 是合法的二叉搜索树
  • 105 <= key <= 105

思路

  • 确定递归函数的返回值和参数
  • 确定终止条件:遇到空返回,没有找到要删除的节点,遇到空直接返回。删除节点的逻辑就在终止条件里(找到要删的点)。
    • 有以下五种情况:
    • 第一种情况:没找到删除的节点,遍历到空节点直接返回了
    • 找到删除的节点
      • 第二种情况:左右孩子都为空(叶子节点),直接删除节点, 返回NULL为根节点
      • 第三种情况:删除节点的左孩子为空,右孩子不为空,删除节点,右孩子补位,返回右孩子为根节点
      • 第四种情况:删除节点的右孩子为空,左孩子不为空,删除节点,左孩子补位,返回左孩子为根节点
      • 第五种情况:左右孩子节点都不为空,则将删除节点的左子树头结点(左孩子)放到删除节点的右子树的最左面节点的左孩子上,返回删除节点右孩子为新的根节点。
  • 单步递归逻辑

题解

Loading...
目录