树:(先序、中序得后序)(中序、后序得先序)递归实现
2015-07-20 10:46
260 查看
/*先序、中序 得 后序 #include <iostream> #include <stdio.h> #include <string.h> #include <string> #include <math.h> #include <queue> #include <stack> #include <map> #include <set> #include <algorithm> using namespace std; #define N 1010 char s1 ,s2 ,ans ; void build(int n,char *s1,char *s2,char *s){ //一定要传入ans,因为每次递归时ans的初始位置都会相应变化! if(n<=0) return ; int mid=0; int len2 = strlen(s2); for(int i=0;i<len2;i++){ if(s1[0]==s2[i]) { mid = i; break; } } //找到中序中 根节点的位置mid s[n-1] = s1[0]; //这里只是求得最后的一个序列。 build(mid,s1+1,s2,s); build(n-mid-1,s1+1+mid,s2+1+mid,s+mid); } int main() { freopen("/Users/a1/Public/20150717/20150717/in.txt","r",stdin); while(scanf("%s %s",s1,s2)!=EOF){ int n = strlen(s1); build(n,s1,s2,ans); ans = '\0'; printf("%s\n",ans); } return 0; } */ /* */ #include <iostream> #include <stdio.h> #include <string.h> #include <string> #include <math.h> #include <queue> #include <stack> #include <map> #include <set> #include <algorithm> using namespace std; #define N 1010 char s1 ,s2 ,ans ; //后序、中序 得先序 void build(int n,char *s1,char *s2,char *s){ //一定要传入ans,因为每次递归时ans的初始位置都会相应变化! if(n<=0) return ; int mid=0; int len2 = strlen(s2); for(int i=len2-1;i>=0;i--){ if(s1[n-1]==s2[i]) { mid = i; break; } } //找到中序中 根节点的位置mid s[0] = s1[n-1]; //这里只是求得最后的一个序列。 build(mid,s1,s2,s+1); build(n-mid-1,s1+mid,s2+1+mid,s+1+mid); } int main() { //freopen("/Users/a1/Public/20150717/20150717/in.txt","r",stdin); while(scanf("%s %s",s1,s2)!=EOF){ int n = strlen(s1); build(n,s1,s2,ans); ans = '\0'; printf("%s\n",ans); } return 0; }
相关文章推荐
- 使用Windows命令行启动服务
- js获取当前时间
- 《你最美》换发型应用源码
- 轮询方法FileSystemWatcher
- forward 和redirect的区别
- 右下角动态弹出框,不随滚动条滚动
- JS iframe父子页面元素调用方法
- Tomcat发布项目
- WIN7下彻底删除Oracle11g
- asp.net使用百度的webuploader批量上传图片
- ext:grid分页,列宽度自动填满grid宽度
- Ubuntu下安装nginx mysql HHVM
- [leetcode] 207.Course Schedule
- Matlab用过函数备忘记录
- iOS开发点滴-添加阴影效果
- 行人检测(Pedestrian Detection)资源
- EasyUI——DataGrid中嵌入Radio
- iOS开发点滴-添加阴影效果
- ThinkPHP的cookide保存二维数组的方法
- OpenStack Weekly Rank 2015.07.20