import java.util.*;
/**
 * Definition for binary tree
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {

    public TreeNode reConstructBinaryTree(int [] pre,int [] vin) {
        TreeNode node = null;
        if(pre==null ||pre.length==0){
            return null;
        }
        node = new TreeNode(pre[0]);
        if(pre.length == 1){
            return node;
        }else{
            //获取前序1节点在中序中的位置
            int index =-1;
            for(int i=0;i<vin.length;i++){
                if(vin[i]==pre[0]){
                    index = i;
                    break;
                }
            }
			//找到左边对应的遍历pre(1,1+index) vin(0,index),递归进行重建           
          node.left=reConstructBinaryTree(Arrays.copyOfRange(pre,1,1+index),Arrays.copyOfRange(vin,0,index));
           
 			//找到右边对应的遍历pre(1+index,length) vin(index+1,length),递归进行重建
          node.right=reConstructBinaryTree(Arrays.copyOfRange(pre,1+index,pre.length),Arrays.copyOfRange(vin,index+1,vin.length));
        }
        return node;
        
        
    }
}