/**
* 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
> &preorder, vector<
int
> &inorder) {
return
buildTree(preorder, 0, preorder.size()-1, inorder, 0, inorder.size()-1);
}
private
:
TreeNode *buildTree(vector<
int
>& preorder,
int
preLeft,
int
preRight, vector<
int
>& inorder,
int
inLeft,
int
inRight)
{
if
(preRight<preLeft)
{
return
NULL;
}
TreeNode* node =
new
TreeNode(preorder[preLeft]);
if
(preRight == preLeft)
{
return
node;
}
int
num = 0;
for
(
int
i = inLeft; i <= inRight; ++i)
{
if
(inorder[i] == preorder[preLeft])
{
num = i;
break
;
}
}
int
length = num - inLeft;
node->left = buildTree(preorder, preLeft+1, preLeft+length, inorder, inLeft, inLeft+length-1);
node->right = buildTree(preorder, preLeft+length+1, preRight, inorder, num+1, inRight);
return
node;
}
};