654. Maximum Binary Tree
构造root值最大的二叉树,先找最大值,再构造左右两边的子树。和前面的二分法一样,只是把求mid换成了找最大值的函数。
public TreeNode constructMaximumBinaryTree(int[] nums) {
return dfs(nums, 0, nums.length - 1);
}
public TreeNode dfs(int[] nums, int l, int r) {
if (l > r) return null;
int max = max(nums, l, r);
TreeNode root = new TreeNode(nums[max]);
root.left = dfs(nums, l, max - 1);
root.right = dfs(nums, max + 1, r);
return root;
}
public int max(int[] nums, int l, int r) {
int max = r;
for (int i = l; i < r; i++) {
if (nums[i] > nums[max]) max = i;
}
return max;
}