```
TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder) {
int i, n;
n = inorder.size();
if (0 == n)
return NULL;
for (i = 0; i < n; i++)
{
if (inorder[i] == postorder[n - 1])
break;
}
vector<int> linorder(inorder.begin(), inorder.begin()+i);
vector<int> rinorder(inorder.begin()+i+1, inorder.end());
vector<int> lpostorder(postorder.begin(), postorder.begin()+i);
vector<int> rpostorder(postorder.begin()+i, postorder.end()-1);
TreeNode *root = new TreeNode(postorder[n-1]);
root->left = buildTree(linorder, lpostorder);
root->right = buildTree(rinorder, rpostorder);
return root;
}
```