import java.util.Arrays;
public class Solution {
public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
int rootNum = -1;
int leftTreeArrayLength = 0;
int rightTreeArrayLength = 0;
if (pre == null || in == null) {
return null;
}

        // 在中序遍历中找到根的位置
        for (int i = 0; i < in.length; i++) {
            if (pre[0] == in[i]) {
                rootNum = i;
            }
        }
        if(rootNum==-1){
            return null;
        }

        // 计算出左子树的数组大小
        leftTreeArrayLength = rootNum;
        // 计算出右子树的数组大小
        rightTreeArrayLength = in.length - rootNum - 1;

        // d定义数组
        int in_left[] = new int[leftTreeArrayLength];
        int in_right[] = new int[rightTreeArrayLength];
        int per_left[] = new int[leftTreeArrayLength];
        int per_right[] = new int[rightTreeArrayLength];

        // 创建树的根
        TreeNode root = new TreeNode(pre[0]);

        // 将原树进行分解;
        for (int i = 0; i < rootNum; i++) {
            in_left[i] = in[i];
        }

        for (int i = 0; i < rightTreeArrayLength; i++) {
            in_right[i] = in[i + rootNum + 1];
        }

        for (int i = 1; i < 1 + leftTreeArrayLength; i++) {
            per_left[i - 1] = pre[i];
        }
        for (int i = leftTreeArrayLength + 1; i < pre.length; i++) {
            per_right[i - leftTreeArrayLength - 1] = pre[i];
        }

        root.left=reConstructBinaryTree(per_left, in_left);
        root.right=reConstructBinaryTree(per_right, in_right);

        return root;

}}