第一题 最大二叉树
一遍A但是内存占用和运行时间都相对长了一点,看了解答发现确实可以减少很多步骤。
class Solution {
public:
TreeNode* buildtree(vector<int> &nums){
if(nums.size() == 0) return nullptr;
int maxvalue = INT_MIN;
int index;
for(int i = 0;i < nums.size();i++){
if(nums[i] > maxvalue){
index = i;
maxvalue = nums[i];
}
}
TreeNode* root = new TreeNode(maxvalue);
if(nums.size() == 1) return root;
vector<int> buildleft(nums.begin(),nums.begin() + index);
vector<int> buildright(nums.begin()+index+1, nums.end());
root->left = buildtree(buildleft);
root->right = buildtree(buildright);
return root;
};
TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
return buildtree(nums);
}
};
第二题 合并二叉树
没什么难度 也A了。
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 == nullptr || root->val == val) return root;
TreeNode* result(nullptr);
if(root->val > val) result = searchBST(root->left,val);
if(root->val < val) result = searchBST(root->right,val);
return result;
}
};
第四题 验证二叉搜索树
直接用中序遍历做 还行
class Solution {
public:
void traversal(TreeNode* root,vector<int> & result){
if(root == nullptr) return;
traversal(root->left,result);
result.push_back(root->val);
traversal(root->right,result);
};
bool isValidBST(TreeNode* root) {
vector<int> result;
traversal(root,result);
for(int i = 1 ;i <result.size();i++){
if(result[i-1] >= result[i] ) return false;
}
return true;
}
};