# 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 trimBST(self, root: Optional[TreeNode], low: int, high: int) -> Optional[TreeNode]:
if not root:
return None
if root.val > high:
return self.trimBST(root.left, low, high)
if root.val < low:
return self.trimBST(root.right, low, high)
root.left = self.trimBST(root.left, low, high)
root.right = self.trimBST(root.right, low, high)
return root# 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 trimBST(self, root, low, high):
while root and (root.val < low or root.val > high):
if root.val < low:
root = root.right
else:
root = root.left
stack = [root]
while stack:
node = stack.pop()
if not node:
continue
left_out = node.left and node.left.val < low
right_out = node.right and node.right.val > high
if left_out:
node.left = node.left.right
if right_out:
node.right = node.right.left
if left_out or right_out:
stack.append(node)
else:
if node.left:
stack.append(node.left)
if node.right:
stack.append(node.right)
return root# 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 trimBST(self, root: Optional[TreeNode], low: int, high: int) -> Optional[TreeNode]:
while root and (root.val < low or root.val > high):
root = root.right if root.val < low else root.left
tmpRoot = root
while root:
while root.left and root.left.val < low:
root.left = root.left.right
root = root.left
root = tmpRoot
while root:
while root.right and root.right.val > high:
root.right = root.right.left
root = root.right
return tmpRoot