---
# System prepended metadata

title: 'LeetCode #669 [Trim a Binary Search Tree](https://leetcode.com/problems/trim-a-binary-search-tree/)'
tags: [Recursion, LeetCode, Medium, Tree]

---

###### tags: `LeetCode` `Tree` `Recursion` `Medium`
# LeetCode #669 [Trim a Binary Search Tree](https://leetcode.com/problems/trim-a-binary-search-tree/)
### (Medium)(第一次沒做出來)

給你二元搜索樹的根節點 root ，同時給定最小邊界low 和最大邊界 high。通過修剪二元搜索樹，使得所有節點的值在[low, high]中。修剪樹不應該改變保留在樹中的元素的相對結構（即，如果沒有被移除，原有的父代子代關係都應當保留）。可以證明，存在唯一的答案。

所以結果應當返回修剪好的二元搜索樹的新的根節點。注意，根節點可能會根據給定的邊界發生改變。


---
判斷條件:
* 若root不存在, 回傳空指標
* 若root的值小於low, 則回傳trimBST(root->right, low, high)
*(因為是二元搜尋樹, 若root小於low, 則整個左子樹都會小於low, 從右子樹開始處理)*
* 若root的值大於high, 則回傳trimBST(root->left, low, high)
*(理由同上, 這次從左子樹開始處理)*
* 若皆不符合以上判斷條件, 代表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);
        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;
    }
};
```