Leetcode 669 修剪二叉搜索树
class Solution {
public:
TreeNode* trimBST(TreeNode* root, int low, int high) {
if(root == NULL) {return root;}
if(root -> val < low){
TreeNode* right = trimBST(root -> right, low, high);
return right;
}
if(root -> val > high){
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;
}
};
Leetcode108 将有序数组转换为二叉搜索树
class Solution {
public:
TreeNode* traversal(vector<int> &vec, int left, int right){
if(left > right) {return nullptr;}
int mid = left + (right - left) / 2;
TreeNode* node = new TreeNode(vec[mid]);
node -> left = traversal(vec, left, mid - 1);
node -> right = traversal(vec, mid + 1, right);
return node;
}
TreeNode* sortedArrayToBST(vector<int>& nums) {
TreeNode* root = traversal(nums, 0, nums.size() - 1);
return root;
//return traversal(nums, 0, nums.size() - 1);
}
};
Leetcode538 把二叉搜索树转换为累加树
class Solution {
public:
int pre = 0;
void traversal(TreeNode* node){
if(node == nullptr) {return;}
traversal(node -> right);
node -> val += pre;
pre = node -> val;
traversal(node -> left);
}
TreeNode* convertBST(TreeNode* root) {
traversal(root);
return root;
}
};