/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: int cnt = 0; TreeNode* build(vector<int>& pre, int l2, int r2, vector<int>& vin) { if (l2 > r2)return NULL; TreeNode* result = new TreeNode(pre[cnt]); int k = l2; for (; k <= r2; k++) if (pre[cnt] == vin[k])break; cnt++; result->left = build(pre, l2, k - 1, vin); result->right = build(pre, k + 1, r2, vin); return result; } TreeNode* reConstructBinaryTree(vector<int> pre, vector<int> vin) { return build(pre, 0, vin.size() - 1, vin); } };