一、669 修剪二叉搜索树

struct TreeNode* trimBST(struct TreeNode* root, int low, int high) {
if(root==NULL)
return NULL;
if(root->val<low){
struct TreeNode* right =trimBST(root->right,low,high);
return right;
}
if(root->val>high){
struct TreeNode* left =trimBST(root->left,low,high);
return left;
}
root->left = trimBST(root->left,low,high);
root->right = trimBST(root->right,low,high);
return root;
}
二、108 将有序数组转换为二叉搜索树

struct TreeNode*Traversal(int *nums,int left,int right){
if(left>right)
return NULL;
int mid = (left+right)/2;
struct TreeNode*root = (struct TreeNode*)malloc(sizeof(struct TreeNode));
root->val = nums[mid];
root->left = Traversal(nums,left,mid-1);
root->right = Traversal(nums,mid+1,right);
return root;
}
struct TreeNode* sortedArrayToBST(int* nums, int numsSize) {
struct TreeNode* root = Traversal(nums,0,numsSize-1);
return root;
}
三、538 把二叉搜索树转换为累加树

//中序遍历->左中右->右中左
int pre;//记录前一个节点的数值
void Traversal(struct TreeNode*cur){
if(cur == NULL)
return;
//右
Traversal(cur->right);
//中
cur->val += pre;
pre = cur->val;
//左
Traversal(cur->left);
}
struct TreeNode* convertBST(struct TreeNode* root) {
pre = 0;
Traversal(root);
return root;
}