Trim a Binary Search Tree - Problem

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 lie 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.

Input & Output

Example 1 — Basic Trimming
$ Input: root = [1,0,2,null,null,1,3], low = 1, high = 2
Output: [1,null,2,null,1]
💡 Note: Remove node 0 (< 1) and node 3 (> 2). Node 0's right subtree becomes new left of root 1.
Example 2 — Root Changes
$ Input: root = [3,0,4,null,2,null,null,1], low = 1, high = 3
Output: [3,2,null,1]
💡 Note: Remove node 0 and 4. The tree structure is preserved with root 3, left subtree [2,1].
Example 3 — All Nodes Valid
$ Input: root = [1,null,2], low = 1, high = 2
Output: [1,null,2]
💡 Note: All nodes are within [1,2] range, so no trimming needed.

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

Visualization

Tap to expand
Trim a Binary Search Tree INPUT Original Binary Search Tree 1 0 2 1 3 Keep (in range) Trim (out of range) root = [1,0,2,null,null,1,3] low = 1, high = 2 ALGORITHM STEPS 1 Base Case Check If node is null, return null 2 Value < Low? Return trim(node.right) (skip node and left subtree) 3 Value > High? Return trim(node.left) (skip node and right subtree) 4 Value in Range Recursively trim both left and right subtrees DFS Recursive Trimming: trim(1): 1 in [1,2] OK L: trim(0): 0 < 1 --> skip R: trim(2): 2 in [1,2] OK L: trim(1): 1 in [1,2] OK R: trim(3): 3 > 2 --> skip FINAL RESULT Trimmed BST (values in [1,2]) 1 2 1 OK - Tree Trimmed! Output: [1,null,2,null,1] Key Insight: BST property enables efficient trimming: if node.val < low, entire left subtree is also < low (skip it). Similarly, if node.val > high, skip entire right subtree. DFS recursively processes valid nodes only. Time: O(n), Space: O(h) where h = tree height. Structure of remaining nodes is preserved. TutorialsPoint - Trim a Binary Search Tree | DFS Recursive Trimming Approach
Asked in
Facebook 15 Amazon 12 Microsoft 8
156.2K Views
Medium Frequency
~15 min Avg. Time
2.8K Likes
Ln 1, Col 1
Smart Actions
💡 Explanation
AI Ready
💡 Suggestion Tab to accept Esc to dismiss
// Output will appear here after running code
Code Editor Closed
Click the red button to reopen