通过前序和中序求树
来源:互联网 发布:mac anaconda使用教程 编辑:程序博客网 时间:2024/05/01 03:10
#include <iostream>#include <string.h>#include <stdio.h>using namespace std;struct ttt{int l,r,w;};char q1[50];char q2[50];ttt qq[500];int walked[500];int n;int gg;int tt;int tree(int x,int y,int m,int w){ int k=x; if(x>y)return 0; while(k<=y){ if(q1[tt]==q2[k]){ walked[tt]=1; break; } k++; } if(k>y)return 0; gg++; qq[gg].w=tt; int g1=gg; if(m==0){ qq[w].l=g1; }else if(m==1){ qq[w].r=g1; } tt++; tree(1,k-1,0,g1); tree(k+1,y,1,g1);}int dfs1(int n){ cout << q1[qq[n].w]; if(qq[n].l!=0)dfs1(qq[n].l); if(qq[n].r!=0)dfs1(qq[n].r);}int dfs2(int n){ if(qq[n].l!=0)dfs2(qq[n].l); cout << q1[qq[n].w]; if(qq[n].r!=0)dfs2(qq[n].r);}int dfs3(int n){ if(qq[n].l!=0)dfs3(qq[n].l); if(qq[n].r!=0)dfs3(qq[n].r); cout << q1[qq[n].w];}int main(){ freopen("in.txt","r",stdin); int i,j,k,f1,f2,f3,t2,t3; int m; int t1=0; cin >>n; for(i=1;i<=n;i++){ cin >> q1[i]; } for(i=1;i<=n;i++){ cin >> q2[i]; } memset(walked,0,sizeof(walked)); gg=0; tt=1; tree(1,n,-1,0); for(i=1;i<=n;i++) cout << i <<"是" << q1[qq[i].w]<< " 左儿子是" << qq[i].l << "右儿子是" <<qq[i].r<< endl; dfs1(1); cout << endl; dfs2(1); cout << endl; dfs3(1); cout << endl; return 0;}
0 0
- 通过前序和中序求树
- 通过前序和中序遍历数组重建树
- 通过前序和后序遍历数组重建树
- 通过前序和中序构造二叉树,并输出后序
- 第四十三题 通过前序遍历和中序遍历构建二叉树
- 算法基础 - 通过前序遍历和中序遍历得到后续遍历
- 数据结构二叉树之通过前序和中序恢复二叉树后续方法输出
- 通过二叉树的前序和中序遍历新建一个二叉树
- 算法学习记录四(C++)--->通过前序和中序序列重建二叉树
- 通过前序遍历和中序遍历重建二叉树以及输出后序遍历(Java实现)
- 假设已经有了前序遍历和中序遍历的结果,通过一个算法重建这棵树
- LeetCode之通过二叉树的中序遍历和前序遍历来还原二叉树
- 通过二叉树的前序序列和后续序列构建二叉树,有问题带定位
- 已知前序和中序求后序
- 已知前序和中序求后序
- 前、中、后缀表达式和前、中、后序遍历
- 通过前序遍历和中序遍历重建二叉树以及输出后序遍历(Java实现)(二)
- Spring bean 通过实现 InitializingBean ,DisposableBean 接口实现初始化方法和销毁前操作
- AndroidStudio2.3升级的后遗症解决
- Unity--移动设备重力感应探悉
- Servlet生命周期
- 微信公众号-Maven开源导入IDE
- error: expected class-name before '{' token 【已解决】
- 通过前序和中序求树
- eclipse无法弹出控制台
- iOS App性能优化
- 字符ASCII码排序
- 网络编程
- 10分钟精通SharePoint-OAuth
- OpenGL——视图关系
- 从输入URL到浏览器显示页面发生了什么
- 门禁系统