Given a binary search tree and the lowest and highest boundaries as L
and R, trim the tree so that all its elements lies in [L, R] (R >= L).
You might need to change the root of the tree, so the result should
return the new root of the trimmed binary search tree.
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
struct TreeNode* trimBST(struct TreeNode* root, int L, int R) {
struct TreeNode * max = NULL;
struct TreeNode * min = NULL;
if(root == NULL){
return NULL;
}
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->left = trimBST(root->left,L,R);
root->right = trimBST(root->right,L,R);
}
if(root->val == L){
root->left = NULL;
root->right = trimBST(root->right,L,R);
}
if(root->val == R){
root->left = trimBST(root->left,L,R);
root->right = NULL;
}
return root;
}