code
class Solution {
private:
unordered_map<int,int> pos;
public:
TreeNode* make_Tree(vector<int>& inorder, vector<int>& postorder,int pl,int pr,int il ,int ir){
if(pl>pr || il>ir){
return nullptr;
}
TreeNode * root = new TreeNode(postorder[pr]);
int k = pos[postorder[pr]] -il;
root->left = make_Tree(inorder,postorder,pl,pl-1+k,il, pos[postorder[pr]]-1);
root->right = make_Tree(inorder,postorder,pl-1+k+1,pr-1, pos[postorder[pr]] + 1, ir);
return root;
}
TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
for(int i=0;i<inorder.size();i++){
pos[inorder[i]] = i;
}
return make_Tree(inorder,postorder,0,inorder.size()-1,0,inorder.size()-1);
}
};