分类:medium 树 分治
Given an integer array with no duplicates. A maximum tree building on this array is defined as follow:
Construct the maximum tree by the given array and output the root node of this tree.
Example 1:
Input: [3,2,1,6,0,5] Output: return the tree root node representing the following tree: 6 / \ 3 5 \ / 2 0 \ 1
Note:
给你一个无序的整数数组,你返回一个最大的树,
1.数组中的最大值为根节点
2.以根节点为准,左子树的根节点为数组左半部分的最大值
3.以根节点为准,右子树的根节点为数组右半部分的最大值
重复以上步骤,构建二叉树,最终返回二叉树的根节点。
已给代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode constructMaximumBinaryTree(int[] nums) {
return getMax(0,nums.length-1,nums);
}
public TreeNode getMax(int start,int end,int []nums){
if(start>end) //结束条件很重要
return null;
int temp=nums[start];
int index=start;
for(int i=start+1;i<=end;i++){
if(nums[i]>temp){
temp=nums[i];
index=i;
}
}
TreeNode node=new TreeNode(temp);
node.left=getMax(start,index-1,nums);//分治法 对左孩子进行递归
node.right=getMax(index+1,end,nums);// 对右孩子进行递归
return node;
}
}