class Solution {
public:
unordered_map<int,int>valToIndex;
TreeNode* constructFromPrePost(vector<int>& preorder, vector<int>& postorder) {
for(int i=0;i<postorder.size();i++){
valToIndex[postorder[i]]=i;
}
return build(preorder,0,preorder.size()-1,
postorder,0,postorder.size()-1);
}
TreeNode* build(vector<int>& preorder,int preStart,int preEnd,
vector<int>& postorder,int postStart,int postEnd){
if(preStart>preEnd){
return nullptr;
}
if(preStart==preEnd){
return new TreeNode(preorder[preStart]);
}
int rootVal=preorder[preStart];
int leftRootVal=preorder[preStart+1];
int index=valToIndex[leftRootVal];
int leftsize=index-postStart+1;
//先构造出当前根节点
TreeNode* root=new TreeNode(rootVal);
root->left=build(preorder,preStart+1,preStart+leftsize,
postorder,postStart,index);
root->right=build(preorder,preStart+leftsize+1,preEnd,
postorder,index+1,postEnd-1);
return root;
}
};