Leetcode654
1.问题描述
2.解决方案
思路可以说很简单,就递归每次找最大,然后递归左右子树,这里强调几点
1.当然需要必要的检查,相信参数中有一个区间的首尾值的检查应该熟记于心了if(start>end) return nullptr;
2.找到最大值下标后就直接递归左右子树了
root->left= build(nums,start,index-1); root->right= build(nums,index+1,end);
class Solution {
public:
TreeNode* build(vector<int>& nums,int start,int end){
//
if(start>end) return nullptr;
//
int index=-1;
int max=INT32_MIN;
for(int i=start;i<=end;i++){
if(nums[i]>max){
max=nums[i];
index=i;
}
}
//
TreeNode* root=new TreeNode(nums[index]);
//
root->left= build(nums,start,index-1);
root->right= build(nums,index+1,end);
return root;
}
TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
return build(nums,0,nums.size()-1);
}
};