给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建:
- 创建一个根节点,其值为 nums中的最大值。
- 递归地在最大值 左边 的 子数组前缀上 构建左子树。
- 递归地在最大值 右边 的 子数组后缀上 构建右子树。
返回 nums 构建的 *最大二叉树* 。
示例 1:

| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 
 | 输入:nums = 输出:
 解释:递归调用如下所示:
 -  中的最大值是 6 ,左边部分是  ,右边部分是  。
 -  中的最大值是 3 ,左边部分是  ,右边部分是  。
 - 空数组,无子节点。
 -  中的最大值是 2 ,左边部分是  ,右边部分是  。
 - 空数组,无子节点。
 - 只有一个元素,所以子节点是一个值为 1 的节点。
 -  中的最大值是 5 ,左边部分是  ,右边部分是  。
 - 只有一个元素,所以子节点是一个值为 0 的节点。
 - 空数组,无子节点。
 
 | 
提示:
- 1 <= nums.length <= 1000
- 0 <= nums[i] <= 1000
- nums中的所有整数 互不相同
同构造二叉树,但每次选取的是左右区间的最大值
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 
 | class Solution {public TreeNode constructMaximumBinaryTree(int[] nums) {
 return buildTree(nums, 0, nums.length-1);
 }
 
 public TreeNode buildTree(int[] nums, int left, int right){
 if(right < left){
 return null;
 }
 int max_index = left;
 int max = nums[left];
 for(int i = left + 1; i <= right; i++){
 if(nums[i] > max){
 max = nums[i];
 max_index = i;
 }
 }
 
 TreeNode root = new TreeNode(nums[max_index]);
 root.left = buildTree(nums, left, max_index-1);
 root.right = buildTree(nums, max_index+1, right);
 return root;
 }
 
 }
 
 |