Construct Binary Tree from Preorder and Inorder Traversal

Given preorder and inorder traversal of a tree, construct the binary tree.

/**
 * 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 *buildTreeTmp(vector<int>::iterator prel, vector<int>::iterator prer, 
                                     vector<int>::iterator inl, vector<int>::iterator inr){
    if (prel >= prer)
        return NULL;

    int val = *prel;
    TreeNode *root = new TreeNode(val);

    vector<int>::iterator rootIndex = find(inl, inr, val); 
    vector<int>::size_type lsize = rootIndex - inl;

    root->left = buildTreeTmp(prel + 1, prel + 1 + lsize, inl, rootIndex);
    root->right = buildTreeTmp(prel + 1 + lsize, prer, rootIndex + 1, inr);

    return root;
    }

    TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {
        return preorder.size() == 0 ? NULL : buildTreeTmp(preorder.begin(), preorder.end(), inorder.begin(), inorder.end());
    }
};

 

posted on 2014-12-04 13:27  code#swan  阅读(100)  评论(0)    收藏  举报

导航