原题链接:https://leetcode.cn/problems/construct-binary-tree-from-inorder-and-postorder-traversal/
使用递归来做
class Solution {
public:
vector<int> in_order, post_order;
unordered_map<int, int> in_mp;
int idx;
TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
in_order = inorder;
post_order = postorder;
int n = inorder.size();
idx = n - 1;
for (int i = 0; i < n; i++) {
in_mp[inorder[i]] = i;
}
return getNode(0, n-1);
}
TreeNode* getNode(int l, int r) {
if (l > r) return NULL;
int m = in_mp[post_order[idx]];
TreeNode* root = new TreeNode(post_order[idx]);
idx--;
root->right = getNode(m+1, r);
root->left = getNode(l, m-1);
return root;
}
};