/* 先序遍历第一个位置肯定是根节点node,
中序遍历的根节点位置在中间p,在p左边的肯定是node的左子树的中序数组,p右边的肯定是node的右子树的中序数组
另一方面,先序遍历的第二个位置到p,也是node左子树的先序子数组,剩下p右边的就是node的右子树的先序子数组
把四个数组找出来,分左右递归调用即可
*/
public class Solution {
public TreeNode reConstructBinaryTree(int [] pre,int [] in)
{
TreeNode root=null;
if(pre.length!=0)
{
root=new TreeNode(pre[0]);
int []prel=null;
int []prer=null;
int []inl=null;
int []inr=null;
for(int i=0;i<in.length;i++)
{
if(in[i]==pre[0])
{
prel=new int[i];
prer=new int[pre.length-i-1];
inl=new int[i];
inr=new int[in.length-i-1];
for(int a=0;a<i;a++)
prel[a]=pre[a+1];
for(int b=0;b<prer.length;b++)
prer[b]=pre[b+i+1];
for(int c=0;c<i;c++)
inl[c]=in[c];
for(int d=0;d<inr.length;d++)
inr[d]=in[d+i+1];
break;
}
}
root.left=reConstructBinaryTree(prel,inl);
root.right=reConstructBinaryTree(prer,inr);
}
return root;
}
}