* Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {
        int n=pre.size();
        int m=vin.size();
        if(!n||!m)
            return NULL;
        TreeNode* root=new TreeNode(pre[0]);
        for(int i=0;i<m;i++){
            if(pre[0]==vin[i]){
                vector<int>leftpre(pre.begin()+1,pre.begin()+i+1);
                vector<int>leftvin(vin.begin(),vin.begin()+i+1);
                root->left=reConstructBinaryTree(leftpre,leftvin);
                vector<int>rightpre(pre.begin()+i+1,pre.end());
                vector<int>rightvin(vin.begin()+i+1,vin.end());
                root->right=reConstructBinaryTree(rightpre,rightvin);
                break;
            }
        }
        return root;
    }
};