TreeNode* trimBST(TreeNode* root, int L, int R) {
preOrder(root,L,R);
return root;
}
void preOrder(TreeNode* &node,int l,int r){
if(!node) return ;
if(node->val<l)
node=node->right;
if(node->val>r)
node=node->left;
if(node->val==l)
node->left=NULL;
if(node->val==r)
node->right=NULL;
if(node->val>=l&&node->val<=r){
preOrder(node->left,l,r);
preOrder(node->right,l,r);
}else{
preOrder(node,l,r);
preOrder(node,l,r);
}
}
TreeNode* trimBST(TreeNode* root, int L, int R) {
if(!root) return NULL;
if(root->val>R) return trimBST(root->left,L,R);
if(root->val<L) return trimBST(root->right,L,R);
root->left=trimBST(root->left,L,R);
root->right=trimBST(root->right,L,R);
return root;
}
TreeNode* trimBST(TreeNode* root, int L, int R,bool top=true) {
if(!root) return NULL;
root->left=trimBST(root->left,L,R,false);
root->right=trimBST(root->right,L,R,false);
if(root->val>=L&&root->val<=R)
return root;
auto res=(root->val<L)?root->right:root->left;
if(!top)
delete root;
return res;
}