class Solution {
public:
unordered_map m; //构造一个哈希表方便定位inorder数组中根节点的位置
TreeNode* build(vector& preorder,int preStart,int preEnd,vector& inorder,int inStart,int inEnd){
if(preStart>preEnd){
return NULL;
}
int rootVal=preorder[preStart];
int index=m[rootVal]; //index对应inorder数组中根节点的下标
int left_size=index-inStart; // 得到左子树中的节点数目
TreeNode* root=new TreeNode(rootVal);
root->left=build(preorder,preStart+1,preStart+left_size,inorder,inStart,inEnd-1);
root->right=build(preorder,preStart + left_size + 1, preEnd,inorder, index + 1, inEnd);
return root;
}
TreeNode* buildTree(vector& preorder, vector& inorder) {
int n=preorder.size();
for(int i=0;i