和leetcode 105差不多的。
class Solution {
public:
TreeNode* find(int l,int r,int ll,int rr,vector<int>& inorder, vector<int>& postorder)
{
if(l<0||r<0||ll<0||rr<0||l>r||ll>rr) return NULL;
TreeNode *root=new TreeNode(postorder[rr]);
if(ll==rr) {root->left=root->right=NULL;return root;}
int mid;
for(int i=l;i<=r;i++) if(inorder[i]==root->val) {mid=i;break;}
root->left=find(l,mid-1,ll,ll+mid-l-1,inorder,postorder);
root->right=find(mid+1,r,ll+mid-l,rr-1,inorder,postorder);
return root;
}
TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
if(inorder.size()==0) return NULL;
return find(0,inorder.size()-1,0,postorder.size()-1,inorder,postorder);
}