450. Delete Node in a BST (Medium) - TengnanYao/daily_leetcode GitHub Wiki
# 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]:
dummy = TreeNode(val = inf, left = root)
q = [dummy]
while q:
node = q.pop()
if node.left:
x = node.left
if x.val == key:
if not x.left and not x.right:
node.left = None
elif x.left:
node.left = x.left
y = x.left
while y.right:
y = y.right
y.right = x.right
else:
node.left = x.right
return dummy.left
q.append(node.left)
if node.right:
x = node.right
if x.val == key:
if not x.left and not x.right:
node.right = None
elif x.left:
node.right = x.left
y = x.left
while y.right:
y = y.right
y.right = x.right
else:
node.right = x.right
return dummy.left
q.append(node.right)
return dummy.left