TreeNode类
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x;this.left=null;this.right=null; }
}
Solution类
注:if(len==0){...}必须写上,因为那是递归的终止条件,而且位置也很重要
public class Solution {
public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
int len = in.length;//获得数组的长度
if(len==0){//当长度为0时,终止递归
return null;
}
int[] left_pre,left_in,right_pre,right_in;//左子树前序、左子树中序、右子树前序、右子树中序
TreeNode head =new TreeNode(pre[0]);
int gen = 0;
for(int i=0;i<len;i++){//获得根节点的位置
if(in[i]==pre[0]){
gen = i;
break;
}
}
//根据根节点的位置为各个数组开辟空间
left_pre = new int [gen];
left_in = new int [gen];
right_pre = new int [len-gen-1];
right_in = new int [len-gen-1];
for(int i=0;i<gen;i++){
left_pre[i]=pre[i+1];
left_in[i]=in[i];
}
for(int i=gen+1;i<len;i++){
right_pre[i-gen-1]=pre[i];
right_in[i-gen-1]=in[i];
}
//递归
head.left = reConstructBinaryTree(left_pre,left_in);
head.right = reConstructBinaryTree(right_pre,right_in);
return head;
}
public static void main(String []args ){
Solution s = new Solution();
int i[] ={1,2,4,7,3,5,6,8};
int j[] = {4,7,2,1,5,3,8,6};
TreeNode t=s.reConstructBinaryTree(i, j);
}
}