105. Construct Binary Tree from Preorder and Inorder Traversal
思路:
recursion
code:
/**
* 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:
vector<int>::iterator getIndex(vector<int>::iterator inB, vector<int>::iterator inE, int target) {
vector<int>::iterator index = inB;
for (index; index != inE; index++)
if (*index == target)
break;
return index;
}
TreeNode* preIn(vector<int>::iterator preB, vector<int>::iterator preE,
vector<int>::iterator inB, vector<int>::iterator inE) {
if (preE == preB) {
return NULL;
} else {
TreeNode* root = new TreeNode(*preB);
vector<int>::iterator inI = getIndex(inB, inE, *preB);
root->left = preIn(preB+1, preB+(inI-inB+1), inB, inI);
root->right = preIn(preB+(inI-inB+1), preE, inI+1, inE);
return root;
}
}
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
return preIn(preorder.begin(), preorder.end(), inorder.begin(), inorder.end());
}
};