Construct Binary Tree from Preorder and Inorder Traversal

来源:互联网 发布:大司马杂货铺淘宝店 编辑:程序博客网 时间:2024/05/16 13:05

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

Note:
You may assume that duplicates do not exist in the 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:    template<typename Iter>    TreeNode* make(Iter pFirst , Iter pLast , Iter iFirst , Iter iLast) {        if(pFirst == pLast) return NULL;        if(iFirst == iLast) return NULL;        int val = *pFirst;        auto iRoot = find(iFirst , iLast , val);        TreeNode* root = new TreeNode(*iRoot);        int leftSize = iRoot - iFirst;        root->left = make(pFirst+1 , pFirst+leftSize+1 , iFirst , iRoot);        root->right = make(pFirst+leftSize+1 , pLast , iRoot + 1 , iLast);        return root;    }    TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {        int size = inorder.size();        if(size == 0) return NULL;        return make(preorder.begin() , preorder.end() , inorder.begin() , inorder.end());    }};


0 0
原创粉丝点击