好几天没更新了,一直在忙,没能刷题,今日补上~
学习安排根据《代码随想录》leetcode654
改题思路很明显,递归调用就好,主要是单层逻辑怎么去想清楚
代码:
寻找最大值:
int maxnum=nums[1];//找最大值
int index=0;//最大值的下标用于分割
for(int i=0;i
{
if(nums[i]>maxnum){maxnum=nums[i];index=i;}
}
node->val=maxnum;//根节点赋值
最大值左边的区间:
if(index>0)
vector
curnums(nums.begin(),nums.begin()+index);//左闭右开 node->left=递归(curnums)//左节点赋值
最大值右边的区间:
if(index
vector
curnums(nums.begin()+index+1,nums.end()); node->right=递归(curnums);
完整代码:
class Solution {
public:
TreeNode* constructMaximumBinaryTree(vector& nums)
{
TreeNode*node=new TreeNode;//建立根节点
//确定终止条件
if(nums.size()==1)
{
node->val=nums[0];
return node;
}
//单层递归逻辑
int maxnum=nums[0];
int xB=0;//找最大值
for(int i=1;ival=maxnum;
if(xB>0)
{
vectorcurnums(nums.begin(),nums.begin()+xB);
node->left=constructMaximumBinaryTree(curnums);
}
if(xBcurnums(nums.begin()+xB+1,nums.end());
node->right=constructMaximumBinaryTree(curnums);
}
return node;
}
};
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)