这道题没给根节点,还得自己重新构建,构建思想和二分法类似
先找到begin到end之间的最大值,记录下这个值的同时记录下这个值的位置,new一个新节点,再将左右节点进行递归
只需要指定好递归终止判断就好,也就是begin>end
/**
-
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:
TreeNode constructtree(vector&nums,int begin,int end)
{
if(begin>end)return NULL;else{ int max=-1,index=-1; for(int i=begin;i<=end;i++) { if(nums[i]>max) { max=nums[i]; index=i; } } TreeNode* root=new TreeNode(nums[index]); root->left=constructtree(nums,begin,index-1); root->right=constructtree(nums,index+1,end); return root; }
}
TreeNode* constructMaximumBinaryTree(vector& nums)
{
int end=nums.size();
TreeNode* root=constructtree(nums,0,end-1);
return root;
}
};