//该题思路非常明确,需要注意的是(1)既分配指针又申请节点内存这一操作 TreeNode* root=new TreeNode(0);
(2) 对于这种left和right的边界判断
if(right<0||left>size) return NULL;
if(left>right) return NULL
if(left==right)
{
root->val=nums[left];
return root;
}
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int size=0;
//前一个位置是索引位置,后一个位置是该索引位置处的值大小
TreeNode* findmax(vector<int>& nums,int left,int right)
{
if(right<0||left>size) return NULL;
if(left>right) return NULL;
//这样一种创建树节点,并分配指针的方式
TreeNode* root=new TreeNode(0);
if(left==right)
{
root->val=nums[left];
return root;
}
int i=left;
int j=right;
int temp=nums[left];
int index=left;
while(i<=j)
{
if(nums[i]>=temp)
{
temp=nums[i];
index=i;
}
if(nums[j]>=temp)
{
temp=nums[j];
index=j;
}
i++;
j--;
}
root->val=temp;
root->left=findmax(nums,left,index-1);
root->right=findmax(nums,index+1,right);
return root;
}
TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
size=nums.size();
if(size==0) return NULL;
return (findmax(nums,0,size-1));
}
};