最大二叉树
这个题与105,106的区别就是只有一个数组
但是也可以构造因为根节点是找最大的然后进行划分
所以不需要像之前那样两个数组来确定根节点然后划分
class Solution {
public:
TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
return traversal(nums,0,nums.size());
}
TreeNode*traversal(vector<int>&nums,int left,int right)
{
// 左右区间如果没有数就返回空
if(left>=right) return NULL;
//找到分割点的坐标(最大值的坐标
int maxvalueindex=left;
for(int i=left+1;i<right;i++)
{
if(nums[i]>nums[maxvalueindex])
{
maxvalueindex=i;
}
}
//构造二叉树
TreeNode *root=new TreeNode(nums[maxvalueindex]);
//在左边区间找最大的
root->left=traversal(nums,left,maxvalueindex);
//在右边区间找最大的
root->right=traversal(nums,maxvalueindex+1,right);
return root;
}
};