重建二叉树

/*
*重建二叉树
执行用时 :21 ms, 在所有 Java 提交中击败了71.88%的用户
内存消耗 :37.8 MB, 在所有 Java 提交中击败了65.37%的用户
*/
public TreeNode buildTree(int[] preorder, int[] inorder) {
int i=preorder.length;int j=inorder.length;
if(i==0||j==0){
return null;
}
return rebuild(preorder,0,i-1,inorder,0,j-1);
}
private TreeNode rebuild( int[] preorder, int i, int i1,
int[] inorder, int i2, int i3) {
if(i>i1 ||i2>i3)return null ;
TreeNode root=new TreeNode(preorder[i]);//当前节点为根节点建树
for(int m=i2 ;m<=i3 ;m++){
if(preorder[i]==inorder [m]){
root.left= rebuild(preorder,i+1,i+(m-i2),//左子树重建
inorder,i2 ,m-1) ;
root .right=rebuild(preorder,i+(m-i2)+1,i1 ,//右子树重建
inorder,m+1,i3) ;
break;
}
}
return root;
}