Construct Binary Tree from Preorder and Inorder Traversal

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

Note:
You may assume that duplicates do not exist in the tree.

 

Subscribe to see which companies asked this question

Show Tags
Show Similar Problems
 
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:

    TreeNode* build(vector<int>& preorder, vector<int>& inorder, int pre_begin, int pre_end, int in_begin, int in_end) {
        TreeNode* root = NULL;
        if (pre_begin > pre_end || in_begin > in_end) {
            return root;
        }
        root = new TreeNode(preorder[pre_begin]);
        int i;
        for (i=in_begin; i<=in_end && inorder[i] != preorder[pre_begin]; i++);
        TreeNode* left = build(preorder, inorder, pre_begin + 1, pre_begin + i - in_begin, in_begin, i - 1);
        TreeNode* right = build(preorder, inorder, pre_begin + i - in_begin + 1, pre_end,  i + 1, in_end);
        root->left = left;
        root->right = right;
        return root;
    }
    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
        return build(preorder, inorder, 0, preorder.size()-1, 0, inorder.size()-1);
    }
};

 

posted on 2016-02-25 15:31  walkwalkwalk  阅读(150)  评论(0编辑  收藏  举报

导航