提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
提示:以下是本篇文章正文内容,下面案例可供参考
一、669修剪二叉搜索树
class Solution {
public:
TreeNode* trimBST(TreeNode* root, int low, int high) {
if (root == nullptr) return root;
if (root->val < low) {
return trimBST(root->right, low, high);
}
else if (root->val > high) {
return trimBST(root->left, low, high);
}
root->left = trimBST(root->left, low, high);
root->right = trimBST(root->right, low, high);
return root;
}
};
迭代法:
class Solution {
public:
TreeNode* trimBST(TreeNode* root, int low, int high) {
if (root == nullptr) return root;
while (root && (root->val < low || root->val > high)) {
if (root->val < low) {
root = root->right;
}
else {
root = root->left;
}
}
//找到头结点
TreeNode* cur = root;
while (cur) {
while (cur->left && cur->left->val < low) {
cur->left = cur->left->right;
}
cur = cur->left;
}
cur = root;
while (cur) {
while (cur->right && cur->right->val > high) {
cur->right = cur->right->left;
}
cur = cur->right;
}
return root;
}
};
二、108将有序数组转换为二叉搜索树
class Solution {
public:
TreeNode* getBST(vector<int>& nums, int low, int high) {
if (low > high) {
return nullptr;
}
int mid = (low + high) / 2;
TreeNode* root = new TreeNode(nums[mid]);
root->left = getBST(nums, low, mid - 1);
root->right = getBST(nums, mid + 1, high);
return root;
}
TreeNode* sortedArrayToBST(vector<int>& nums) {
int n = nums.size() - 1;
return getBST(nums, 0, n);
}
};
三、538把二叉搜索树转换为累加树
class Solution {
public:
int sum = 0;
TreeNode* convertBST(TreeNode* root) {
if (root == nullptr) return root;
//右
root->right = convertBST(root->right);
//中
root->val += sum;
sum = root->val;
//左
root->left = convertBST(root->left);
return root;
}
};