力扣
题解:- 找到数组最大元素按照最大元素拆分数组左数组构建左子树右数组构建右子树
public TreeNode constructMaximumBinaryTree(int[] nums) {
return buildTree(0, nums.length, nums);
}
private TreeNode buildTree(int left, int right, int[] nums) {
if (left >= right) {
return null;
}
int maxValueIndex = findMaxValueIndex(left, right, nums);
TreeNode newTreeNode = new TreeNode(nums[maxValueIndex]);
newTreeNode.left = buildTree(left, maxValueIndex, nums);
newTreeNode.right = buildTree(maxValueIndex + 1, right, nums);
return newTreeNode;
}
private int findMaxValueIndex(int left, int right, int[] nums) {
int maxValue = Integer.MIN_VALUE;
int maxValueIndex = -1;
for (int i = left; i < right; i++) {
if (nums[i] > maxValue) {
maxValue = nums[i];
maxValueIndex = i;
}
}
return maxValueIndex;
}
时间复杂度:O(n)



