根据数组构建最大二叉树
class Solution {
public TreeNode constructMaximumBinaryTree(int[] nums) {
return maxTree(nums, 0, nums.length - 1);
}
private TreeNode maxTree(int[] nums, int l, int r) {
if (l > r) {
return null;
}
int index = findMax(nums, l, r);
TreeNode root = new TreeNode(nums[index]);
root.left = maxTree(nums, l, index - 1);
root.right = maxTree(nums, index + 1, r);
return root;
}
private int findMax(int[] nums, int l, int r) {
int maxIndex = l;
int maxValue = Integer.MIN_VALUE;
for (int i = l; i <= r; i++) {
if (nums[i] > maxValue) {
maxValue = nums[i];
maxIndex = i;
}
}
return maxIndex;
}
}