给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:
- 二叉树的根是数组中的最大元素。
- 左子树是通过数组中最大值左边部分构造出的最大二叉树。
- 右子树是通过数组中最大值右边部分构造出的最大二叉树。
通过给定的数组构建最大二叉树,并且输出这个树的根节点。
Example 1:
输入: [3,2,1,6,0,5] 输入: 返回下面这棵树的根节点: 6 / \ 3 5 \ / 2 0 \ 1
注意:
给定的数组的大小在 [1, 1000] 之间。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
这道题的解法和由中序和前序构建二叉树的那道题有点类似,函数里用了st,ed两个变量来记录区间的端点。
思路不难,直接代码吧。
AC:
class Solution {
public:
TreeNode* fun(vector<int>& nums,int st,int ed)
{
if(st>ed) //如果st<ed,那么也就是说这个区间不存在,就说明这个指针为NULL。
return NULL;
int max=nums[st];
int k=st;
for (int i=st;i<=ed;i++)
{
if (max<nums[i])
{
max=nums[i];
k=i;
}
}
TreeNode* r=new TreeNode(max);
r->left=fun(nums,st,k-1);
r->right=fun(nums,k+1,ed);
return r;
}
TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
if (nums.size()==0)
return NULL;
return fun(nums,0,nums.size()-1);
}
};
今天写的多文档编辑器让我完成的挺好的,今天还行吧,,,,,,,,,,,,,