python
# 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 root
# 遍历搜索树,找到要删除的节点
if root.val < key:
root.right = self.deleteNode(root.right, key)
elif root.val > key:
root.left = self.deleteNode(root.left, key)
else:
if not root.left or not root.right:
# 如果当前节点只有一个子树,则直接让子树的根节点代替当前节点
root = root.left if root.left else root.right
else:
# 否则找到左子树的最大值或右子树的最小值代替当前节点
node = root.left
while node.right:
# 找到左子树的最大节点
node = node.right
# 进行值替换,并删除左子树中被替换上来的最大节点
root.val = node.val
root.left = self.deleteNode(root.left, node.val)
return root