思想:还是从给定区间内(一堆节点中)构成二叉树的问题
根节点root选择当前区间的最大值(位于区间的第maxIdx位置上的值)构成
左子树区间为[start,maxIdx-1],右子树区间为[maxIdx+1,end]
递归构造即可
时间复杂度O(n^2),空间复杂度O(logn)
class Solution {
public TreeNode helper(int[]nums,int start,int end){
if(start>end)return null;
int idx = start,maxIdx = start;
while(idx<=end){
if(nums[idx]>nums[maxIdx]){
maxIdx = idx;
}
idx++;
}
TreeNode root = new TreeNode(nums[maxIdx]);
root.left = helper(nums,start,maxIdx-1);
root.right = helper(nums,maxIdx+1,end);
return root;
}
public TreeNode constructMaximumBinaryTree(int[] nums) {
if(nums.length<=0)return null;
return helper(nums,0,nums.length-1);
}
}