LeetCode669.修剪二叉搜索树
class Solution {
public:
TreeNode* trimBST(TreeNode* root, int low, int high) {
if(!root)return nullptr;
while(root && (root->val < low || root->val >high)){
if(root->val < low){
root = root->right;
}else if(root->val >high){
root = root->left;
}
}
if(!root)return nullptr;
root->left = trimBST(root->left, low, high);
root->right = trimBST(root->right, low, high);
return root;
}
};
LeetCode108.将有序数组转化为二叉搜索树
class Solution {
public:
TreeNode* sortedArrayToBST(vector<int>& nums) {
TreeNode* root;
if(nums.size() == 1){
root = new TreeNode(nums[0]);
return root;
}else if(nums.empty()){
root = nullptr;
return root;
}else{
int midIndex = nums.size()/2;
root = new TreeNode(nums[midIndex]);
vector<int> leftnums(nums.begin(), nums.begin() + midIndex);
vector<int> rightnums(nums.begin() + midIndex + 1, nums.end());
root->left = sortedArrayToBST(leftnums);
root->right = sortedArrayToBST(rightnums);
return root;
}
}
};
LeetCode538.把二叉搜索树转化为二叉累加树
class Solution {
public:
int pre;
TreeNode* convertBST(TreeNode* root) {
pre = 0;
traversal(root);
return root;
}
void traversal(TreeNode* root){
if(!root) return;
traversal(root->right);
root->val = root->val + pre;
pre = root->val;
traversal(root->left);
}
};