1. # Definition for a binary tree node.
    2. # class TreeNode:
    3. # def __init__(self, val=0, left=None, right=None):
    4. # self.val = val
    5. # self.left = left
    6. # self.right = right
    7. class Solution:
    8. def deleteNode(self, root: TreeNode, key: int) -> TreeNode:
    9. #1. find 2. delete
    10. if key == None:
    11. return root
    12. DummyNode = TreeNode()
    13. DummyNode.left = root
    14. targetParent = DummyNode
    15. while root != None and root.val != key:
    16. targetParent = root
    17. if root.val > key:
    18. root = root.left
    19. else:
    20. root = root.right
    21. if root == None:
    22. return DummyNode.left
    23. if root.left == None:
    24. if targetParent.left == root:
    25. targetParent.left = root.right
    26. else:
    27. targetParent.right = root.right
    28. else:
    29. maxNode = root.left
    30. maxNodeParent = root
    31. while maxNode.right != None:
    32. maxNodeParent = maxNode
    33. maxNode = maxNode.right
    34. if maxNodeParent.left == maxNode:
    35. maxNode.right = root.right
    36. else:
    37. maxNodeParent.right = maxNode.left
    38. maxNode.left = root.left
    39. maxNode.right = root.right
    40. if targetParent.left == root:
    41. targetParent.left = maxNode
    42. else:
    43. targetParent.right = maxNode
    44. return DummyNode.left