Monday, November 25, 2013

LeetCode Problem : Construct Binary Tree from Preorder and Inorder Traversal

Problem


Given preorder and inorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.

Code

TreeNode *buildTree_r(vector<int> &preorder, vector<int> &inorder,int lp,int li,int len) {
    if(len == 0)
        return 0;
    int i = 0;
    while(inorder[li + i] != preorder[lp])
        ++i;
    TreeNode *root = new TreeNode(preorder[lp]);
    root->left = buildTree_r(preorder,inorder,lp + 1,li,i);
    root->right = buildTree_r(preorder,inorder,lp + i + 1,li + i + 1,len - i - 1);
    return root;
}
TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {
    // IMPORTANT: Please reset any member data you declared, as
    // the same Solution instance will be reused for each test case.
    int n = preorder.size();    
    return buildTree_r(preorder,inorder,0,0,n);
}

No comments:

Post a Comment