由树的中序和先序遍历得到原来的树
来源:互联网 发布:数学建模优化模型 编辑:程序博客网 时间:2024/05/01 17:14
先序遍历的意义:任何一个节点的父节点都早于他遍历。
中序遍历的意义:任何一个节点都晚于左子树上的节点早于右子树上的节点被遍历。
in.txt 第一行是表示有多少个节点
61 2 3 4 5 62 1 5 4 3 6
程序:
获得原来的树放在tab表中 root 的左右孩子分别是 2*root 和 2*root +1
#include<cstdio>#include<cmath>#include<iostream>#include<vector>using namespace std;int root=1;int a[20],_a[20],b[20],_b[20],tab[200];int getpos(int *tab,int v){int pos=1;while(tab[pos]!=v)pos++;return pos;}void build(int len){tab[len]=a[root];int pos=getpos(b,a[root]);_b[pos]=1;if(!_b[pos-1]){root++,build(len*2);}if(!_b[pos+1]){root++,build(len*2+1);}}void show_first(int root){if(!tab[root])return;cout<<tab[root]<<" ";show_first(root*2);show_first(root*2+1);}void show_mid(int root){if(!tab[root])return;show_mid(root*2);cout<<tab[root]<<" ";show_mid(root*2+1);}int main(){freopen("in.txt","r",stdin);int n;scanf("%d",&n);for(int i=0;i<n;i++)scanf("%d",&a[i+1]);for(int i=0;i<n;i++)scanf("%d",&b[i+1]);memset(_a,0,sizeof(_a));memset(_b,0,sizeof(_b));_b[0]=1;_b[n+1]=1;//边界build(1);cout<<""<<endl;show_first(1);cout<<endl;show_mid(1);cout<<endl;}
- 由树的中序和先序遍历得到原来的树
- 由先序遍历和中序遍历构造二叉树的二叉链表代码
- 由树的先序和中序遍历生成树的层序遍历后序遍历
- 代码实现 由二叉树的先序遍历和中序遍历推出后序遍历
- UVA536 水,根据先序和中序得到二叉树的后续遍历
- 由后序和中序遍历得到先序遍历
- 由 先序遍历序列和中序遍历序列 求出 后序遍历的序列
- 二叉树已知先序遍历和中序遍历得到后序遍历
- 二叉树的遍历(篇5)由中序和先序序列重建二叉树
- JS中由先序遍历和中须遍历构造二叉树
- 由二叉树的先序和中序遍历生成二叉树的层序和后序遍历结构
- 由先序遍历和中序遍历建立二叉树
- 二叉树树的先序遍历,中序遍历和后序遍历
- 根据中序遍历和后序遍历求二叉树的先序遍历
- 二叉树的先序遍历、中序遍历、后续遍历和二叉树还原
- 已知二叉树的先序遍历和中序遍历,如何求后序遍历
- 由先序和中序遍历序列建立二叉树
- 由中序与后序遍历得到二叉树
- 各种零碎命令
- Jquery折叠菜单
- 关于Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)的问题
- 为右键菜单添加进入CMD快捷方式
- ---Ubuntu 11.10 给自己的程序增加启动器
- 由树的中序和先序遍历得到原来的树
- Disable BlueTooth on Ubuntu 11.10 's Startup
- 终止符EOF在windows平台中如何输入
- 如何阻止SCCM安装文件到一个指定的盘符上
- MySQL创建用户与授权
- 女人,男人面痣图解
- iPhone 画圆角矩形
- 拷贝Revit中的对象的诀窍,顺论Revit中对象的拷贝
- WIN7下安装xp双系统