leetcode 654 Maximum Binary Tree
题意:按给定的数组建树,数组数值无重复。
1.The root is the maximum number in the array.
1.根是数组最大的元素。
2.The left subtree is the maximum tree constructed from left part subarray divided by the maximum number.
2.当前根元素将原数组分成两部分,左子树由左边部分最大元素构成。
3.The right subtree is the maximum tree constructed from right part subarray divided by the maximum number.
3.右子树由右边部分最大元素构成。
要求你输出按要求建的树。
套用一个dfs,类似二分区间。
class Solution {
public:
TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
int l=0, r=nums.size()-1;
return dfs(nums,l,r);
}
TreeNode* dfs(vector<int>& nums, int l ,int r){
if(l>r) return NULL;
int maxnum = nums[l],maxid = l;
for(int i = l;i <= r;i++){
if(maxnum < nums[i]){
maxnum = nums[i];
maxid = i;
}
}
TreeNode* rt = new TreeNode(maxnum);
rt->left = dfs(nums, l, maxid-1);
rt->right = dfs(nums, maxid+1, r);
return rt;
}
};