1. 题目
返回与给定的前序和后序遍历匹配的任何二叉树。
pre 和 post 遍历中的值是不同的正整数。
示例:输入:pre = [1,2,4,5,3,6,7], post = [4,5,2,6,7,3,1]
输出:[1,2,3,4,5,6,7]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-postorder-traversal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
class Solution {
public:TreeNode* constructFromPrePost(vector<int>& pre, vector<int>& post) {unordered_map<int,int> m;for(int i = 0; i < pre.size(); ++i)m[pre[i]] = i;return bt(pre,0,pre.size()-1,post,0,post.size()-1,m);}TreeNode* bt(vector<int>& pre,int preS, int preE,vector<int>& post, int postS, int postE, unordered_map<int,int> &m){if(preS > preE)return NULL;if(preS == preE){return new TreeNode(pre[preS]);}TreeNode *root = new TreeNode(pre[preS]);int leftlen = m[post[postE-1]]-preS-1;int rightlen = preE-m[post[postE-1]]+1;root->left = bt(pre,preS+1,preS+leftlen,post,postS,postS+leftlen-1,m);root->right = bt(pre,m[post[postE-1]],preE,post,postE-rightlen,postE-1,m);return root;}
};