class Solution {
public:
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
int preLength = preorder.size();
int inLength = inorder.size();
return buildTree(preorder,0,preLength - 1,inorder,0,inLength-1);
}
TreeNode* buildTree(vector<int>& preorder,int preStart,int preEnd, vector<int>& inorder,int inStart,int inEnd) {
if(preStart>preEnd || inStart>inEnd) return NULL;
int rootVal =preorder[preStart];
int rootindex = inStart;
for(int i = inStart;i<=inEnd;i++){
if(rootVal == inorder[i] ){
rootindex = i;
break;
}
}
cout<<rootindex<<endl;
TreeNode *root = new TreeNode(rootVal);
int length = rootindex - inStart;
cout<<preStart+1<<preStart + length<<inStart<<rootindex - 1<<endl;
cout<<preStart + length + 1<<preEnd<<rootindex + 1<<inEnd<<endl;
root->left = buildTree(preorder,preStart+1,preStart + length,inorder,inStart,rootindex - 1);
root->right = buildTree(preorder,preStart + length + 1,preEnd,inorder,rootindex + 1,inEnd);
return root;
}
};