修剪二叉搜索树:
返回值代表修剪之后的二叉树的根节点
所以对于NULLreturn NULL
对于 不符合的 返回右子树和左子树的修剪结果
对于符合的 修剪左右子树 最后返回修剪完的子树
通过接住返回值来达到删除结点的目的
class Solution {
public:
TreeNode* trimBST(TreeNode* root, int low, int high) {
if(root==NULL)
return NULL;
//说明当前左子树和本身都要舍去
if(root->val<low)
return trimBST(root->right,low,high);
else if(root->val>high)
return trimBST(root->left,low,right);
else{
root->left=trimBST(root->left,low,high);
root->right=trimBST(root->right,low,high);
return root;
}
}
};
class Solution {
public:
void dfs(TreeNode *&root,vector<int> nums){
if(nums.empty())
return;
else{
int mid=nums.size()/2;
root=new TreeNode(nums[mid]);
dfs(root->left,vector<int>(nums.begin(),nums.begin()+mid));
dfs(root->right,vector<int>(nums.begin()+mid+1,nums.end()));
}
}
TreeNode* sortedArrayToBST(vector<int>& nums) {
TreeNode *root=NULL;
dfs(root,nums);
return root;
}
};
class Solution {
public:
int sum=0;
//左根右是顺序 右根左是倒叙
void dfs(TreeNode *&root){
if(root==NULL){
return;
}else{
dfs(root->right);
sum+=root->val;
root->val=sum;
dfs(root->left);
}
}
TreeNode* convertBST(TreeNode* root) {
dfs(root);
return root;
}
};