Let `trim(node)`

be the answer for the subtree at that node.

When `node.val > R`

, we know the trimmed binary tree must occur to the left of the node. Similarly, when `node.val < L`

, the trimmed binary tree occurs to the right of the node. Otherwise, we will trim both sides of the tree.

```
def trimBST(self, root, L, R):
def trim(node):
if node:
if node.val > R:
return trim(node.left)
elif node.val < L:
return trim(node.right)
else:
node.left = trim(node.left)
node.right = trim(node.right)
return node
return trim(root)
```