1 class Solution { 2 public: 3 TreeNode* reConstructBinaryTree(vector<int> pre, vector<int> vin) { 4 if (pre.size() == 0 || vin.size() == 0 || pre.size() != vin.size()) 5 return nullptr; 6 return createTree(pre, vin, 0, pre.size() - 1, 0, pre.size() - 1); 7 } 8 TreeNode *createTree(vector<int> pre, vector<int> vin, int inL, int inR, int preL, int preR) 9 { 10 if (inL > inR)return nullptr; 11 TreeNode *root = new TreeNode(pre[preL]); 12 int k = inL; 13 while (k <= inR && vin[k] != pre[preL])k++; 14 int m = k - inL; 15 root->left = createTree(pre, vin, inL, k - 1, preL + 1, preL + m); 16 root->right = createTree(pre, vin, k + 1, inR, preL + m + 1, preR); 17 return root; 18 } 19 };
原文:https://www.cnblogs.com/zzw1024/p/11651182.html