给定一个不重复的整数数组 nums
。 最大二叉树 可以用下面的算法从 nums
递归地构建:
- 创建一个根节点,其值为
nums
中的最大值。 - 递归地在最大值 左边 的 子数组前缀上 构建左子树。
- 递归地在最大值 右边 的 子数组后缀上 构建右子树。
返回 nums
构建的 最大二叉树 。
public static TreeNode constructMaximumBinaryTree(int[] nums) {
TreeNode root=traversal(nums,0,nums.length);
return root;
}
public static TreeNode traversal(int[] nums,int begin ,int end){
if(end-begin<1){
return null;
}
if(end-begin==1){
return new TreeNode(nums[begin]); //数组中只有一个节点
}
//1.先找到最大值和对应角标
int max=nums[begin];
int index=begin;
for(int i=begin+1;i<end;i++){
if(nums[i]>max){
max=nums[i];
index=i;
}
}
TreeNode root=new TreeNode(max); //创建根节点
//划分左右子树
root.left=traversal(nums,begin,index); //构建左子树
root.right=traversal(nums,index+1,end); //构建右子树
return root;
}