给定一个不重复的整数数组 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;}