Add solution for BTS: remove element
This commit is contained in:
parent
df21a31267
commit
df759315e2
1 changed files with 34 additions and 0 deletions
|
@ -0,0 +1,34 @@
|
|||
from typing import Optional
|
||||
|
||||
|
||||
class TreeNode:
|
||||
def __init__(self, val=0, left=None, right=None):
|
||||
self.val = val
|
||||
self.left = left
|
||||
self.right = right
|
||||
|
||||
|
||||
class Solution:
|
||||
def find_min(self, root) -> TreeNode:
|
||||
cur = root
|
||||
while cur and cur.left:
|
||||
cur = cur.left
|
||||
return cur
|
||||
|
||||
def deleteNode(self, root: Optional[TreeNode], key: int) -> Optional[TreeNode]:
|
||||
if not root:
|
||||
return None
|
||||
if key < root.val:
|
||||
root.left = self.deleteNode(root.left, key)
|
||||
elif key > root.val:
|
||||
root.right = self.deleteNode(root.right, key)
|
||||
else:
|
||||
if not root.right:
|
||||
return root.left
|
||||
elif not root.left:
|
||||
return root.right
|
||||
else:
|
||||
min_node = self.find_min(root.right)
|
||||
root.val = min_node.val
|
||||
root.right = self.deleteNode(root.right, min_node.val)
|
||||
return root
|
Loading…
Reference in a new issue