1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| Input: [3,2,1,6,0,5] Output: return the tree root node representing the following tree:
6 / \ 3 5 \ / 2 0 \ 1 ``` **Note:** The size of the given array will be in the range [1,1000].
```java /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public TreeNode constructMaximumBinaryTree(int[] nums) { int max = findMax(0, nums.length - 1, nums); TreeNode root = new TreeNode(nums[max]); root.left = helper(0, max - 1, nums); root.right = helper(max + 1, nums.length - 1, nums); return root; }
private int findMax(int start, int end, int[] nums) { int max = start; for (int i = start + 1; i <= end; i++) { if (nums[i] > nums[max]) { max = i; } } return max; }
private TreeNode helper(int start, int end, int[] nums) { if (start > end) return null; if (start == end) return new TreeNode(nums[start]); int max = findMax(start, end, nums); TreeNode n = new TreeNode(nums[max]); n.left = helper(start, max - 1, nums); n.right = helper(max + 1, end, nums); return n; } }
|