class Solution {
public:
TreeNode * buildTree(vector<int>& preorder, vector<int>& inorder) {
int a = preorder.size();
int b = inorder.size();
return constructree(preorder, inorder, 0, a - 1, 0,b - 1);
}
TreeNode *constructree(vector<int>& preorder, vector<int>& inorder, int prel, int prer, int inl, int inr) {
if (prel > prer) return NULL;
int tmp(preorder[prel]);
int i;
for (i = inl; i <= inr; i++) {
if (inorder[i] == tmp)
break;
}
TreeNode* newnode = new TreeNode(tmp);
newnode->left = constructree(preorder, inorder, prel + 1, prel + i - inl, inl, i - 1);
newnode->right = constructree(preorder, inorder, prel + i - inl + 1, prer, i+1, inr);
return newnode;
}
};
public:
TreeNode * buildTree(vector<int>& preorder, vector<int>& inorder) {
int a = preorder.size();
int b = inorder.size();
return constructree(preorder, inorder, 0, a - 1, 0,b - 1);
}
TreeNode *constructree(vector<int>& preorder, vector<int>& inorder, int prel, int prer, int inl, int inr) {
if (prel > prer) return NULL;
int tmp(preorder[prel]);
int i;
for (i = inl; i <= inr; i++) {
if (inorder[i] == tmp)
break;
}
TreeNode* newnode = new TreeNode(tmp);
newnode->left = constructree(preorder, inorder, prel + 1, prel + i - inl, inl, i - 1);
newnode->right = constructree(preorder, inorder, prel + i - inl + 1, prer, i+1, inr);
return newnode;
}
};