中止条件和切分数组看了一下题解,有一些启发
class Solution {
public:
TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
TreeNode* node=new TreeNode(0);
if (nums.size()==1)
{
node->val=nums[0];
return node;
}
int maxnum=INT_MIN;
int mid=0;
for(int i=0;i<nums.size();i++)
{
if(nums[i]>maxnum)
{
maxnum=nums[i];
mid=i;
}
}
node->val=maxnum;
if(mid>0)
{
vector<int>leftnums(nums.begin(),nums.begin()+mid);
node->left=constructMaximumBinaryTree(leftnums);
}
if(mid<nums.size()-1)
{
vector<int>rightnums(nums.begin()+mid+1,nums.end());
node->right=constructMaximumBinaryTree(rightnums);
}
return node;
}
};
class Solution {
public:
TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
if(root1==NULL)return root2;
if(root2==NULL)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==NULL||root->val==val)
return root;
TreeNode *result=NULL;
if(root->val<val)
result=searchBST(root->right,val);
if(root->val>val)
result=searchBST(root->left,val);
return result;
}
};
巧妙地判断
class Solution {
public:
vector<int>nums;
void traversal(TreeNode* node)
{
if(node==NULL)return;
traversal(node->left);
nums.push_back(node->val);
traversal(node->right);
}
bool isValidBST(TreeNode* root) {
traversal(root);
for(int i=0;i<nums.size()-1;i++)
{
if(nums[i]>=nums[i+1])
return false;
}
return true;
}
};