TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
if (preorder.size() == 0)
return NULL;
TreeNode *pRoot = new TreeNode(preorder[0]);
vector<int> pre_left,pre_right,vin_left,vin_right;
int ngen=0;
for(int i=0;i<inorder.size();i++){
if(inorder[i]==preorder[0]){
ngen=i;
break;
}
}
for(int i=0;i<ngen;i++){
vin_left.push_back(inorder[i]);
pre_left.push_back(preorder[i+1]);
}
for(int i=ngen+1;i< inorder.size();i++){
vin_right.push_back(inorder[i]);
pre_right.push_back(preorder[i]);
}
pRoot->left= buildTree(pre_left,vin_left);
pRoot->right=buildTree(pre_right,vin_right);
return pRoot;
}