###### 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; } }; ```