/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class
Solution {
public
:
TreeNode *buildTree(vector<
int
> &inorder, vector<
int
> &postorder) {
return
buildTree(inorder, 0, inorder.size() - 1, postorder, 0, postorder.size() -1 );
}
private
:
TreeNode *buildTree(vector<
int
> &inorder,
int
inLeft,
int
inRight, vector<
int
>& postorder,
int
postLeft,
int
postRight)
{
if
(inLeft > inRight)
{
return
NULL;
}
TreeNode* node =
new
TreeNode(postorder[postRight]);
if
(inLeft == inRight)
{
return
node;
}
int
num = 0;
for
(
int
i = inLeft; i <= inRight; ++i)
{
if
(inorder[i] == node->val)
{
num = i;
break
;
}
}
int
leftLen = num - inLeft;
node->left = buildTree(inorder, inLeft, num - 1, postorder, postLeft, postLeft + leftLen - 1);
node->right = buildTree(inorder, num + 1, inRight, postorder, postLeft + leftLen, postRight - 1);
return
node;
}
};