剑指Offer(4)______重建二叉树
来源:互联网 发布:听力打卡的软件 编辑:程序博客网 时间:2024/06/06 18:01
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{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); }};
0 0
- 剑指Offer(4)______重建二叉树
- 剑指offer:(4)树:重建二叉树
- 剑指offer 4 重建二叉树
- 《剑指offer》—4、重建二叉树
- 剑指offer(4)—重建二叉树
- 剑指offer--(4) 重建二叉树
- [剑指offer]算法4 重建二叉树
- [剑指offer]重建二叉树
- 【剑指offer】重建二叉树
- 剑指offer--重建二叉树
- 剑指offer---重建二叉树
- 剑指Offer-重建二叉树
- 剑指offer:重建二叉树
- 剑指offer-重建二叉树
- 《剑指offer》重建二叉树
- 【剑指Offer】重建二叉树
- 剑指offer-重建二叉树
- 《剑指offer》-重建二叉树
- Merge k sorted lists
- hdu 1285 拓扑排序起步
- 【Mysql】体系结构
- 青年创业急需代言人,微商能否扛旗冲锋
- UVA 120 Stacks of Flapjacks ——思路题
- 剑指Offer(4)______重建二叉树
- Spring MVC之简单入门
- Boost库的编译
- 遍历HashMap的四种
- 线段树水题专项赛[2017.3.23]
- Elasticsearch索引迁移的三种方式
- 欢迎使用CSDN-markdown编辑器
- L2-008. 最长对称子串
- 解决ubuntu linux下更新idea导致idea字体改变的问题