LeetCode 0669. Trim a Binary Search Tree Solution in Java, Python, C++, JavaScript, Go & Rust | Explanation + Code

CoderIndeed
0
0669. Trim a Binary Search Tree

Description

Given the root of a binary search tree and the lowest and highest boundaries as low and high, trim the tree so that all its elements lies in [low, high]. Trimming the tree should not change the relative structure of the elements that will remain in the tree (i.e., any node's descendant should remain a descendant). It can be proven that there is a unique answer.

Return the root of the trimmed binary search tree. Note that the root may change depending on the given bounds.

 

Example 1:

Input: root = [1,0,2], low = 1, high = 2
Output: [1,null,2]

Example 2:

Input: root = [3,0,4,null,2,null,null,1], low = 1, high = 3
Output: [3,2,null,1]

 

Constraints:

  • The number of nodes in the tree is in the range [1, 104].
  • 0 <= Node.val <= 104
  • The value of each node in the tree is unique.
  • root is guaranteed to be a valid binary search tree.
  • 0 <= low <= high <= 104

Solutions

Solution 1

PythonJavaC++GoTypeScriptRustJavaScriptC
# 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]: def dfs(root): if root is None: return root if root.val > high: return dfs(root.left) if root.val < low: return dfs(root.right) root.left = dfs(root.left) root.right = dfs(root.right) return root return dfs(root)(code-box)

Solution 2

PythonJavaC++GoJavaScript
# 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.left if root.val > high else root.right if root is None: return None node = root while node.left: if node.left.val < low: node.left = node.left.right else: node = node.left node = root while node.right: if node.right.val > high: node.right = node.right.left else: node = node.right return root(code-box)

Post a Comment

0Comments

Post a Comment (0)

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Check Now
Accept !