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:
TreeNode *buildTree(vector<int>::iterator prebegin, vector<int>::iterator preend,
vector<int>::iterator inbegin, vector<int>::iterator inend) {
if(prebegin == preend) return NULL;
TreeNode *root = new TreeNode(*prebegin);
auto pos = find(inbegin, inend, *prebegin);
int length = pos - inbegin;
root->left = buildTree(prebegin + 1, prebegin + length + 1, inbegin, inbegin + length);
root->right = buildTree(prebegin + length + 1, preend, inbegin + length + 1, inend);
return root;
}
TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {
return buildTree(preorder.begin(), preorder.end(), inorder.begin(), inorder.end());
}
};