diff --git a/problems/0654.最大二叉树.md b/problems/0654.最大二叉树.md index ef417078..905bcbae 100644 --- a/problems/0654.最大二叉树.md +++ b/problems/0654.最大二叉树.md @@ -224,27 +224,32 @@ root->right = traversal(nums, maxValueIndex + 1, right); Java: -```java + +```Java class Solution { public TreeNode constructMaximumBinaryTree(int[] nums) { - if (nums.length == 0) return null; - return constructMaximumBinaryTree(nums,0,nums.length); + return constructMaximumBinaryTree1(nums, 0, nums.length); } - private TreeNode constructMaximumBinaryTree(int[] nums, int begin, int end) { - if (begin == end) return null; - - int rootValue = nums[begin]; - int index = begin; - for (int i = begin; i < end ; i++) { - if (nums[i] > rootValue) { - rootValue = nums[i]; - index = i; + public TreeNode constructMaximumBinaryTree1(int[] nums, int leftIndex, int rightIndex) { + if (rightIndex - leftIndex < 1) {// 没有元素了 + return null; + } + if (rightIndex - leftIndex == 1) {// 只有一个元素 + return new TreeNode(nums[leftIndex]); + } + int maxIndex = leftIndex;// 最大值所在位置 + int maxVal = nums[maxIndex];// 最大值 + for (int i = leftIndex + 1; i < rightIndex; i++) { + if (nums[i] > maxVal){ + maxVal = nums[i]; + maxIndex = i; } } - TreeNode root = new TreeNode(rootValue); - root.left = constructMaximumBinaryTree(nums, begin,index); - root.right = constructMaximumBinaryTree(nums,index+1,end); + TreeNode root = new TreeNode(maxVal); + // 根据maxIndex划分左右子树 + root.left = constructMaximumBinaryTree1(nums, leftIndex, maxIndex); + root.right = constructMaximumBinaryTree1(nums, maxIndex + 1, rightIndex); return root; } }