class Solution {
public:
TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
if(postorder.size() == 0) return nullptr;
int rootvalue = postorder[postorder.size() - 1];
TreeNode* root = new TreeNode(rootvalue);
if(postorder.size() == 0) return root;
int index;
for(index = 0; index < inorder.size(); index++) {
if(inorder[index] == rootvalue) break;
}
vector<int> inorder_left(inorder.begin(), inorder.begin() + index);
vector<int> inorder_right(inorder.begin() + index + 1, inorder.end());
vector<int> postorder_left(postorder.begin(), postorder.begin() + index);
vector<int> postorder_right(postorder.begin() + index, postorder.end() - 1);
root->left = buildTree(inorder_left, postorder_left);
root->right = buildTree(inorder_right, postorder_right);
return root;
}
};