题目链接
最大二叉树
题目描述

注意
解答思路
- 创建一个能够找到数组中某一段的最大值的方法,在找到当次最大值的位置后以二分的思想再分别寻找左右两段的最大值
代码
class Solution {
public TreeNode constructMaximumBinaryTree(int[] nums) {
return findMax(nums, 0, nums.length - 1);
}
TreeNode findMax(int[] nums, int left, int right) {
if(left > right) {
return null;
}
int max = left;
for(int i = left; i <= right; i++) {
if(nums[i] > nums[max]) {
max = i;
}
}
TreeNode node = new TreeNode();
node.val = nums[max];
node.left = findMax(nums, left, max - 1);
node.right = findMax(nums, max + 1, right);
return node;
}
}
- 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
关键点
- 每次找到某一段的最大值后以该位置为节点分为两部分,再执行相同的操作