二叉搜索树的删除
450.删除二叉搜索树中的节点
给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。
一般来说,删除节点可分为两个步骤:
- 首先找到需要删除的节点;
- 如果找到了,删除它。
示例 1:
1 |
|
示例 2:
1 |
|
示例 3:
1 |
|
提示:
- 节点数的范围
[0, 104]
. -105 <= Node.val <= 105
- 节点值唯一
root
是合法的二叉搜索树-105 <= key <= 105
替换法
1.删除的节点是叶子节点直接删除
2.删除节点左子树不为空,右子树为空,用左子树替补
3.删除节点右子树不为空,左子树为空,用右子树替补
4.删除节点左右子树都不为空,找到右子树最左节点,用其值替换删除节点的值,然后删除右子树上的该节点
1 |
|
直接变换法
前三种情况同替换法相同
第四种情况为:
将待删除结点的左子树插入到右子树的最左结点的左孩子上,然后右子树替补删除节点
1 |
|
迭代法
1 |
|
二叉搜索树的删除
http://example.com/2023/04/18/算法/二叉树/27. 二叉搜索树的删除/