解法一

每次找出最大值的下标,创建结点,然后递归遍历左右子树。

  1. /**
  2. * Definition for a binary tree node.
  3. * public class TreeNode {
  4. * int val;
  5. * TreeNode left;
  6. * TreeNode right;
  7. * TreeNode(int x) { val = x; }
  8. * }
  9. */
  10. class Solution {
  11. public TreeNode constructMaximumBinaryTree(int[] nums) {
  12. if (nums.length == 0) {
  13. return null;
  14. }
  15. if (nums.length == 1) {
  16. return new TreeNode(nums[0]);
  17. }
  18. int maxIndex = 0;
  19. for (int i = 0; i < nums.length; ++i) {
  20. if (nums[i] > nums[maxIndex]) {
  21. maxIndex = i;
  22. }
  23. }
  24. TreeNode node = new TreeNode(nums[maxIndex]);
  25. if (maxIndex > 0) {
  26. node.left = constructMaximumBinaryTree(Arrays.copyOfRange(nums, 0, maxIndex));
  27. }
  28. if (maxIndex < nums.length - 1) {
  29. node.right = constructMaximumBinaryTree(Arrays.copyOfRange(nums, maxIndex + 1, nums.length));
  30. }
  31. return node;
  32. }
  33. }