# 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 root==None:
return root
if root.val==key:
if not root.left and not root.right:
del root
return None
if not root.left and root.right:
tmp=root
root=root.right
del tmp
return root
if root.left and not root.right:
tmp=root
root=root.left
del tmp
return root
if root.left and root.right:
r=root.right
while r.left:
r=r.left
r.left=root.left
tmp=root
root=root.right
del tmp
return root
if root.val>key:
root.left=self.deleteNode(root.left,key)
if root.val<key:
root.right=self.deleteNode(root.right,key)
return root
''' 1、没有此结点
有此结点
2、左右孩子都没有,直接删除。
3、右侧没有左侧有,左孩子补位
4、左侧没有右侧有,右孩子补进去
5、左右都有,把结点的左头结点放在右子树最左侧叶结点上
'''