/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* };
*/
#include <vector>
class Solution {
public:
void p(TreeNode* t) {
if (t) {
cout << t->val << " ";
p(t->left);
p(t->right);
}
}
TreeNode* create(vector<int> pre, int l1, int r1, vector<int> in, int l2, int r2) {
int mid;
for (int i = 0; i < in.size(); i++) {
if (in[i] == pre[l1]) {
mid = i;
break;
}
}
TreeNode* node = new TreeNode(pre[l1]);
int llen = mid - l2;
int rlen = r2 - mid;
if (llen > 0) {
node->left = create(pre, l1 + 1, l1 + llen, in, l2, l2 + llen - 1);
}
else node->left = nullptr;
if (rlen > 0) {
node->right = create(pre, l1 + 1 + llen, r2, in, l2 + llen + 1, r2);
}
else node->right = nullptr;
return node;
}
TreeNode* reConstructBinaryTree(vector<int> pre, vector<int> vin) {
if (pre.size() == 0) return nullptr;
return create(pre, 0, pre.size()-1, vin, 0, vin.size()-1);
}
};