106. Construct Binary Tree from Inorder and Postorder 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* inPost(vector<int>::iterator inB, vector<int>::iterator inE,
vector<int>::iterator postB, vector<int>::iterator postE) {
if (postE == postB) {
return NULL;
} else {
TreeNode* root = new TreeNode(*(postE-1));
vector<int>::iterator inI = getIndex(inB, inE, root->val);
root->left = inPost(inB, inI, postB, postB+(inI-inB));
root->right = inPost(inI+1, inE, postB+(inI-inB), postE-1);
return root;
}
}
TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
return inPost(inorder.begin(), inorder.end(), postorder.begin(), postorder.end());
}
};