第一次看到这个题完全没弄懂,直接查了一下解法:
1.当root的值在L和R之间时,递归修剪其左右子树,返回root值。
2.当root的值小于L,(说明root和左子树的值都不符合条件),直接修剪右子树。
3.当root的值大于R,(说明root和右子树的值都不符合条件),直接修剪左子树。
class Solution {
public:
TreeNode* trimBST(TreeNode* root, int L, int R) {
if (root == NULL) return NULL;
else {
if (root->val < L) return(trimBST(root->right, L, R));
if (root->val > R) return(trimBST(root->left, L, R));
if (root->val >= L && root->val <= R)
{
root->right=trimBST(root->right, L, R);
root->left=trimBST(root->left, L, R);
return root;
}
}
}
};
注意递归问题,每个可能的分支都要有返回值的,trimBST()也是有返回值的。