原题目:https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-postorder-traversal/
思路:
前序: 根 + 左子树 + 右子树
后序: 左子树 + 右子树 + 根
每次在后序中找到根的位置,递归的构建左子树和右子树就可以了。
代码:
class Solution {
public:
TreeNode* construct(vector<int> pre,vector<int> post,int prestart,int preend,int poststart,int postend){
if(prestart>preend || poststart > postend) return NULL;
TreeNode* root = new TreeNode(pre[prestart]);
if(prestart == preend) return root;
int index = 0;
while(post[index] != pre[prestart+1]) index++;
root->left = construct(pre,post,prestart+1,prestart + index +1-poststart,poststart,index);
root->right = construct(pre,post,prestart+index-poststart+2,preend,index+1,preend-1);
return root;
}
public:
TreeNode* constructFromPrePost(vector<int>& pre, vector<int>& post) {
return construct(pre,post,0,pre.size()-1,0,post.size()-1);
}
};