106. Construct Binary Tree from Inorder and Postorder Traversal
Given inorder and postorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
TreeNode* loopNode(vector<int>& inorder, vector<int>& postorder, int begin, int end){
if(end < begin || postorder.empty()){
return NULL;
}
TreeNode temp(postorder[postorder.size() - 1]);
TreeNode* node = new TreeNode(postorder[postorder.size() - 1]);
postorder.pop_back();
vector<int>::iterator iter = find(inorder.begin() + begin, inorder.begin() + end, node->val);
node->right = loopNode(inorder, postorder, iter - inorder.begin() + 1, end);
node->left = loopNode(inorder, postorder, begin, iter - inorder.begin() - 1);
return node;
}
TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder){
TreeNode* root = loopNode(inorder, postorder, 0, inorder.size() - 1);
return root;
}