代码随想录算法打卡第十七天, 新手自我记录一下刷题历程, 仅为自我打卡使用.
初次接触二叉搜索树(BST), 第四题果然掉进了陷阱里
class Solution {
public:
TreeNode* construct(vector<int>& nums, int start, int end) {
if (start == end - 1)
return new TreeNode(nums[start]);
int maxValue = INT32_MIN;
int index;
for (int i = start; i < end; ++i) {
if (nums[i] > maxValue) {
maxValue = nums[i];
index = i;
}
}
TreeNode* root = new TreeNode(maxValue);
if (index > start)
root->left = construct(nums, start, index);
if (index + 1 < end)
root->right = construct(nums, index + 1, end);
return root;
}
TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
return construct(nums, 0, nums.size());
}
};
合并两棵树也是头一次遇到, 学习了
class Solution {
public:
TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
if (root1 == nullptr)
return root2;
if (root2 == nullptr)
return root1;
root1->val += root2->val;
root1->left = mergeTrees(root1->left, root2->left);
root1->right = mergeTrees(root1->right, root2->right);
return root1;
}
};
class Solution {
public:
TreeNode* searchBST(TreeNode* root, int val) {
if (!root) return nullptr;
if (val == root->val)
return root;
else if (val > root->val)
return searchBST(root->right, val);
else
return searchBST(root->left, val);
}
};
class Solution {
public:
TreeNode* pre;
bool isValidBST(TreeNode* root) {
if (!root) return true;
bool left = isValidBST(root->left);
if (pre && root->val <= pre->val)
return false;
pre = root;
bool right = isValidBST(root->right);
return left && right;
}
};
要学的还很多啊, 学无止境!
希望明天还能坚持刷一天!