代码随想录算法打卡第二十天, 新手自我记录一下刷题历程, 仅为自我打卡使用.
第一题修剪比较难, 这道题leetcode的后台测试好像有点问题, 加了一个根节点的内存释放竟然过不了
标准写法应该把多余的节点内存都释放掉, 这里我只释放了根节点的.
后两题比较简单, 一遍过.
class Solution {
public:
TreeNode* trimBST(TreeNode* root, int low, int high) {
if (root == nullptr)
return nullptr;
if (root->val < low) {
TreeNode* right = trimBST(root->right, low, high);
// delete root;
return right;
}
if (root->val > high) {
TreeNode* left = trimBST(root->left, low, high);
// delete root;
return left;
}
root->left = trimBST(root->left, low, high);
root->right = trimBST(root->right, low, high);
return root;
}
};
class Solution {
public:
TreeNode* constructBST(vector<int>& nums, int start, int end) {
if (start == end)
return nullptr;
int index = (end - start) / 2 + start;
TreeNode* node = new TreeNode(nums[index]);
node->left = constructBST(nums, start, index);
node->right = constructBST(nums, index + 1, end);
return node;
}
TreeNode* sortedArrayToBST(vector<int>& nums) {
return constructBST(nums, 0, nums.size());
}
};
class Solution {
public:
int sum = 0;
void traversal(TreeNode* root) {
if (root == nullptr)
return;
traversal(root->right);
sum += root->val;
root->val = sum;
traversal(root->left);
}
TreeNode* convertBST(TreeNode* root) {
sum = 0;
traversal(root);
return root;
}
};
二叉树基础章节完事了! 撒花!