/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
/**
*@param preorder : A list of integers that preorder traversal of a tree
*@param inorder : A list of integers that inorder traversal of a tree
*@return : Root of a tree
*/
public:
TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {
// write your code here
int in_num;
int length=inorder.size();
TreeNode* root=new TreeNode;
if(length==0) return NULL;
if(length==1)
{
root->val = preorder[0];
root->left = root->right = NULL;
return root;
}
root->val=preorder[0];
for(int i=0;i<length;i++)
{
if(preorder[0]==inorder[i])
{
in_num=i;
break;
}
}
vector<int> left_preorder_new;
vector<int> left_inorder_new;
for(int j=0;j<in_num;j++)
{
left_preorder_new.push_back(preorder[j+1]);
left_inorder_new.push_back(inorder[j]);
}
root->left=buildTree(left_preorder_new,left_inorder_new);
vector<int> right_preorder_new;
vector<int> right_inorder_new;
for(int j=in_num+1;j<length;j++)
{
right_preorder_new.push_back(preorder[j]);
right_inorder_new.push_back(inorder[j]);
}
root->right=buildTree(right_preorder_new,right_inorder_new);
return root;
}
};