2
* Definition for a binary tree node.7
* TreeNode() : val(0), left(nullptr), right(nullptr) {}8
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}9
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left),17
TreeNode *solve(vector<int> &pre, int p, vector<int> &pos, int q) {18
TreeNode *root = new TreeNode(pre[p]);23
if (p >= pre.size() || q < 0) {28
while (x > 0 and pos[x] != pre[p]) x--;29
if (pos[x] == pre[p]) {30
root->left = solve(pre, p, pos, x);35
while (x < pre.size() - 1 and pos[q] != pre[x]) x++;36
if (pos[q] == pre[x]) {37
root->right = solve(pre, x, pos, q);43
TreeNode *constructFromPrePost(vector<int> &preorder, vector<int> &postorder) {44
int n = postorder.size();45
return solve(preorder, 0, postorder, n - 1);