450. 删除二叉搜索树中的节点
题目描述
代码实现
# 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: TreeNode, key: int) -> TreeNode:
if not root:
return
if root.val == key:
# 左子树为空,返回右子树
# 右子树为空,返回左子树
# 均为空,直接返回孔
if not root.left:
return root.right
if not root.right:
return root.left
# 均不为空时,找到左子树最大值,或者右子树最小值
min_node = self.get_min(root.right) # 右子树最小值
root.val = min_node.val
root.right = self.deleteNode(root.right, min_node.val) # 需要删除右子树最小值,因为它已经作为子树根节点
elif root.val > key:
root.left = self.deleteNode(root.left, key)
elif root.val < key:
root.right = self.deleteNode(root.right, key)
return root
def get_min(self, root):
while root.left:
root = root.left
return root
参考
https://mp.weixin.qq.com/s?__biz=MzAxODQxMDM0Mw==&mid=2247488128&idx=2&sn=b8fb3fd2917f9ac86127054741cd5877&chksm=9bd7ec88aca0659ee0185b657663169169493e9df2063f%C3%A0d28b38a0b4d0dd698d0301937898&scene=21#wechat_redirect