Given preorder and inorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
class Solution {
public:
TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if(inorder.size()==0)
return NULL;
TreeNode *root=Build(0,preorder.size()-1,0,inorder.size()-1,preorder,inorder);
return root;
}
TreeNode *Build(int lp,int rp,int li,int ri,vector<int> &preorder , vector<int> &inorder){
if(lp>rp || lp>preorder.size()-1)
return NULL;
TreeNode *root=new TreeNode(preorder[lp]);
TreeNode *left,*right;
int i;
for(i=li;i<=ri;i++)
if(inorder[i]==preorder[lp])
break;
int lt=i-li;
int rt=ri-i;
left=Build(lp+1,lp+lt,li,i-1,preorder,inorder);
right=Build(lp+1+lt,rp,i+1,ri,preorder,inorder);
root->left=left;
root->right=right;
return root;
}
};