本题和 106 题类似,106. 从中序与后序遍历序列构造二叉树。不过本题每次递归函数内都是先找出最大值,然后最大值左边传入递归生成左子树,最大值右边传入递归生成右子树。106解题思路
代码如下:
public class lc654 {
public TreeNode constructMaximumBinaryTree(int[] nums) {
if (nums.length == 0) return null;
TreeNode root = getNode(nums, 0, nums.length - 1);
return root;
}
public TreeNode getNode(int[] nums, int start, int end) {
if(start>end) return null;
if (start == end) return new TreeNode(nums[start]);
int index = start, max = nums[start];
for (int i = start; i <= end; i++) {
if (nums[i] > max) {
max = nums[i];
index = i;
}
}
TreeNode node = new TreeNode(nums[index]);
node.left = getNode(nums, start, index - 1);
node.right = getNode(nums, index + 1, end);
return node;
}
}