由中根序列和后根序列重建二叉树
2015-12-08 17:57
183 查看
/* 1:由中根序列和后根序列重建二叉树 查看 提交 统计 提问 总时间限制: 500ms 内存限制: 65535kB 描述 我们知道如何按照三种深度优先次序来周游一棵二叉树,来得到中根序列、前根序列和后根序列。 反过来,如果给定二叉树的中根序列和后根序列,或者给定中根序列和前根序列,可以重建一二叉树。 本题输入一棵二叉树的中根序列和后根序列,要求在内存中重建二叉树,最后输出这棵二叉树的前根序列。 用不同的整数来唯一标识二叉树的每一个结点,下面的二叉树 中根序列是9 5 32 67 后根序列9 32 67 5 前根序列5 9 67 32 输入 两行。第一行是二叉树的中根序列,第二行是后根序列。每个数字表示的结点之间用空格隔开。 结点数字范围0~65535。暂不必考虑不合理的输入数据。 输出 一行。由输入中的中根序列和后根序列重建的二叉树的前根序列。每个数字表示的结点之间用空格隔开。 样例输入 9 5 32 67 9 32 67 5 样例输出 5 9 67 32 */ #include<iostream> using namespace std; #define MaxNum 65536 int InOrder[MaxNum], PostOrder[MaxNum]; struct Node { int data; Node *leftChild, *rightChild; }; Node* BuildTree(int In_Start, int In_End, int Post_Start, int Post_End) { Node *root = new Node; root->data = PostOrder[Post_End]; root->leftChild = NULL; root->rightChild = NULL; int n = 0; while (InOrder[In_Start + n] != root->data) n++; if (n >= 1) root->leftChild = BuildTree(In_Start, In_Start + n - 1, Post_Start, Post_Start + n - 1); if (In_Start + n < In_End) root->rightChild = BuildTree(In_Start + n + 1, In_End, Post_Start + n, Post_End - 1); return root; } void Pre_Travel(Node *root) { if(root) { cout << root->data << ' '; Pre_Travel(root->leftChild); Pre_Travel(root->rightChild); } } void delete_Tree(Node *root) { while (root) { delete_Tree(root->leftChild); delete_Tree(root->rightChild); delete[] root; root = NULL; } } int main() { int i = 0,num = 0; while (cin >> InOrder[i++]) { if (cin.get() != ' ') //遇到回车则停止输入 break; } i = 0; while (cin >> PostOrder[i++]) { if (cin.get() != ' ') //遇到回车则停止输入 break; } num = i - 1; Node *root = BuildTree(0, num, 0, num); Pre_Travel(root); delete_Tree(root); return 0; }
相关文章推荐
- ZZULIOJ 1801 xue姐的小动物
- 低电压穿越检测测试内容与流程
- 学习网站
- 【Cocos2d-x】之检测语言环境
- hibernate可以生成数据库comment字段的注解
- Unity根据相机截屏
- VC计时器使用的一些总结
- SVN服务器搭建和使用(二)
- JS 禁用和重新启用a标签的点击事件
- iPhone兴起零基础菜鸟怎样自学iOS开发
- Android中如何开启悬浮窗的硬件加速绘制功能?
- java中文件名必须和类名一致吗
- Data Vault初探(一) —— 基础
- JavaSE_JavaSE中int、String的类型转换
- ProgressDialog(对话框)
- 黑马程序员——java基础---集合--Collection
- Ubuntu修改bash
- C语言经典编程题--哥德巴赫猜想 、完数 、猜数字等
- Android流式布局-FlowLayout
- 114 nginx 更新ubuntu14.04 localhost无法访问