## [Leetcode]669. Trim a Binary Search Tree

### 题目描述

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.

### 例子

#### 例子 1

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

#### 例子 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 in the range [1, 10^4].`
• `0 <= Node.val <= 10^4`
• `The value of each node in the tree is unique.`
• `root is guaranteed to be a valid binary search tree.`
• `0 <= low <= high <= 10^4`

### 解题思路

• 如果当前 root 为空，直接返回
• 如果当前 root 比下界还小，左子树全部丢弃，对右子树进行递归处理之后返回右子树的根节点即可
• 同理，如果当前 root 比上界还大，右子树全部丢弃，对左子树进行递归处理之后返回左子树的根节点即可
• 如果当前 root 在合法范围内，则对左右子树各自进行迭代操作，然后将处理后的左右子树根节点接上即可
``````class Solution {
public:
TreeNode* trimBST(TreeNode* root, int low, int high) {
if (!root) {
return nullptr;
}
if (root->val < low)
{
return trimBST(root->right, low, high);
}
else if (root->val > high)
{
return trimBST(root->left, low, high);
}
root->left = trimBST(root->left, low, high);
root->right = trimBST(root->right, low, high);
return root;
}
};
``````
• 时间复杂度: O(n)
• 空间复杂度: O(1)