/* | |
Author: Annie Kim, anniekim.pku@gmail.com | |
Date: May 16, 2013 | |
Problem: Construct Binary Tree from Preorder and Inorder Traversal | |
Difficulty: Easy | |
Source: http://leetcode.com/onlinejudge#question_105 | |
Notes: | |
Given preorder and inorder traversal of a tree, construct the binary tree. | |
Note: | |
You may assume that duplicates do not exist in the tree. | |
Solution: Recursion. | |
*/ | |
/** | |
* 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> &preorder, vector<int> &inorder) {
return buildTreeRe(preorder.begin(), inorder.begin(), preorder.size());
}
TreeNode *buildTreeRe(vector<int>::iterator preorder, vector<int>::iterator inorder, int N) {
if (N <= 0) return NULL;
vector<int>::iterator it = find(inorder, inorder + N, *preorder);
int pos = it - inorder;
TreeNode *root = new TreeNode(*preorder);
root->left = buildTreeRe(preorder+1, inorder, pos);
root->right = buildTreeRe(preorder+1+pos, inorder+pos+1, N-1-pos);
return root;
}
};