剑指offer——05重建二叉树
题目描述
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
已知中序遍历和前序遍历,可以得到唯一的二叉树
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 };