题目:biubiu
题意:根据中序和后序构造二叉树,力扣105的姐妹题,原理相同。
class Solution {
public:
TreeNode* dfs(vector<int>& inorder, vector<int>& postorder,int x,int y,int k,int z){
if(k>z||x>y){
return NULL;
}
if(z<0)
return NULL;
TreeNode *root=new TreeNode(postorder[z]);
root->left=dfs(inorder,postorder,x,mp[postorder[z]]-1, k,z-(y-mp[postorder[z]])-1);
root->right=dfs(inorder,postorder,mp[postorder[z]]+1,y,z-(y-mp[postorder[z]]),z-1);
return root;
}
TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
for(int i=0;i<inorder.size();i++){
mp[inorder[i]]=i;
}
int n=postorder.size()-1;
return dfs(inorder,postorder,0,n,0,n);
}
private:
unordered_map<int,int>mp;
};