class Solution {
public: TreeNode* helpbuildTree(vector<int>& inorder,int bgn0,int end0,vector<int>& postorder,int bgn1,int end1) { if(bgn0>end0||bgn1>end1) return NULL; TreeNode* root = new TreeNode(postorder[end1]); int i; for(i=bgn0;i<=end0;i++) { if(postorder[end1]==inorder[i]) break; } root->left=helpbuildTree(inorder,bgn0,i-1,postorder,bgn1,bgn1+i-1-bgn0); root->right=helpbuildTree(inorder,i+1,end0,postorder,bgn1+i-bgn0,end1-1); return root; } TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) { if(inorder.empty()||postorder.empty()) return NULL; return helpbuildTree(inorder,0,inorder.size()-1,postorder,0,postorder.size()-1); } };