# 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 = rightclass Solution: def deleteNode(self, root: TreeNode, key: int) -> TreeNode: #1. find 2. delete if key == None: return root DummyNode = TreeNode() DummyNode.left = root targetParent = DummyNode while root != None and root.val != key: targetParent = root if root.val > key: root = root.left else: root = root.right if root == None: return DummyNode.left if root.left == None: if targetParent.left == root: targetParent.left = root.right else: targetParent.right = root.right else: maxNode = root.left maxNodeParent = root while maxNode.right != None: maxNodeParent = maxNode maxNode = maxNode.right if maxNodeParent.left == maxNode: maxNode.right = root.right else: maxNodeParent.right = maxNode.left maxNode.left = root.left maxNode.right = root.right if targetParent.left == root: targetParent.left = maxNode else: targetParent.right = maxNode return DummyNode.left