class Solution { public: TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) { int vinlen=vin.size(); if(vinlen==0) return NULL; vector<int> pre_left, pre_right, vin_left, vin_right; TreeNode* head = new TreeNode(pre[0]); int gen = 0; for(int i=0;i<vinlen;i++) { if(vin[i]==pre[0]) { gen=i; break; } } for(int i=0;i<gen;i++) { vin_left.push_back (VIN [I]); // preorder traversal sequence left subtree pre_left.push_back (pre [I + . 1 ]); // preorder traversal sequence before the left subtree } for(int i=gen+1;i< vinlen;i++) { vin_right.push_back (VIN [I]); // preorder traversal sequence right subtree pre_right.push_back (pre [I]); // preorder traversal sequence before the right subtree } head->left = reConstructBinaryTree(pre_left, vin_left); head->right = reConstructBinaryTree(pre_right, vin_right); return head; } };