剑指Offer(4)______重建二叉树
2017-03-23 21:23
381 查看
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
class Solution { public: bool errflag; void clearNode(TreeNode* node){ if(node != NULL){ clearNode(node->left); clearNode(node->right); delete node; } } TreeNode* build(vector<int>& pre,vector<int>& vin,int l1,int r1,int l2,int r2) { if(r1 - l1 != r2 - l2 || errflag){ errflag = true;return NULL; //鲁棒性: 判断先序和中序长度是否不一致. } if(l1 > r1) return NULL; int index = -1; for(int i = l2 ; i <= r2 ; i ++) if(vin[i] == pre[l1]) index = i; if(index == -1){ errflag = true;return NULL; //鲁棒性: 判断是否遍历序列有错误. } TreeNode* temp = new TreeNode(pre[l1]); temp->left = build(pre,vin,l1+1,l1+index-l2,l2,index-1); temp->right = build(pre,vin,l1+index-l2+1,r1,index+1,r2); if(errflag){ clearNode(temp); //良好习惯: 发生错误就要将创建的节点回收. return NULL; } return temp; } TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) { errflag = false; return build(pre,vin,0,pre.size()-1,0,vin.size()-1); } };
相关文章推荐
- 【剑指offer】面试题六:重建二叉树
- 剑指offer——重建二叉树
- 剑指offer:6-重建二叉树
- 剑指offer 重建二叉树
- 剑指offer-重建二叉树
- 重建二叉树 (剑指Offer 第 4 题)
- 剑指offer编程题——06 重建二叉树
- 剑指Offer 6 重建二叉树
- 剑指offer 01-06解答思路以及代码(顺序数组找特定数字,替换空格字符,链表反转输出,重建二叉树,两个栈实现队列效果,旋转数组最小元素)
- 剑指offer 6 重建二叉树
- 【剑指Offer】重建二叉树
- 剑指Offer面试题6:重建二叉树 Java实现
- 【剑指Offer】重建二叉树 解题报告(Java & Python)
- 剑指offer:重建二叉树
- 重建二叉树(剑指offer6、编程之美3.9)
- 剑指offer面试题6——重建二叉树(递归)
- 剑指offer-二叉树的重建
- [牛客网,剑指offer,python] 重建二叉树
- 【剑指offer】面试题6:重建二叉树
- 剑指offer——题目1385:重建二叉树