最大二叉树--p654--递归构造
Posted ming_szu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最大二叉树--p654--递归构造相关的知识,希望对你有一定的参考价值。
与p106相似
package tree; import sun.reflect.generics.tree.Tree; /** * 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下: 二叉树的根是数组中的最大元素。 左子树是通过数组中最大值左边部分构造出的最大二叉树。 右子树是通过数组中最大值右边部分构造出的最大二叉树。 通过给定的数组构建最大二叉树,并且输出这个树的根节点。 Example 1: 输入: [3,2,1,6,0,5] 输入: 返回下面这棵树的根节点: 6 / 3 5 \ / 2 0 1 注意: 给定的数组的大小在 [1, 1000] 之间。 */ public class p654 { public TreeNode constructMaximumBinaryTree(int[] nums) { if(nums.length==0)return null; if(nums.length==1)return new TreeNode(nums[0]); TreeNode root=null; root=buildTree(nums); return root; } public TreeNode buildTree(int []nums){ if(nums.length==0)return null; int i,max=0,maxIndex=-1; for(i=0;i<nums.length;i++){ //找到最大值 if(max<nums[i]){ max=nums[i]; maxIndex=i; } } TreeNode node=new TreeNode(nums[maxIndex]); //左子树数组 int leftTree[]=new int[maxIndex]; System.arraycopy(nums,0,leftTree,0,leftTree.length); //右子树数组 int rightTree[]=new int[nums.length-maxIndex-1]; System.arraycopy(nums,maxIndex+1,rightTree,0,rightTree.length); node.left=buildTree(leftTree); node.right=buildTree(rightTree); return node; } }
以上是关于最大二叉树--p654--递归构造的主要内容,如果未能解决你的问题,请参考以下文章