[剑指offer] 4. 重建二叉树
题目描述
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
思路:
递归调用,分左右块进行构建。
class Solution { public: TreeNode *reConstructBinaryTree(vector<int> pre, vector<int> vin) { return helper(pre, 0, pre.size() - 1, vin, 0, vin.size() - 1); } TreeNode *helper(vector<int> pre, int pbeg, int pend, vector<int> vin, int vbeg, int vend) { if (pbeg > pend || vbeg > vend) return NULL; TreeNode *res = new TreeNode(pre[pbeg]); int index = 0; while (index < vend) { if (vin[index] == pre[pbeg]) break; index++; } cout << res->val << endl; res->left = helper(pre, pbeg + 1, pend + index - vbeg, vin, vbeg, index - 1); res->right = helper(pre, pbeg + 1 + index - vbeg, pend, vin, index + 1, vend); return res; } };