遍历问题
来源:互联网 发布:json xml 比较优缺点 编辑:程序博客网 时间:2024/05/29 23:23
学过数据结构不久,就算当时懂了也会忘记,昨天一直在想树的遍历问题,弄到今天才弄懂,写给在遍历问题上同有困惑的童鞋~~,若觉不好,我是菜鸟,请见谅!
遍历问题
时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte
总提交:78 测试通过:58
描述
已知二叉树的中序和先序遍历可以唯一确定后序遍历、已知中序和后序遍历可以唯一确定先序遍历,但已知先序和后序,却不一定能唯一确定中序遍历。现要求根据输入的中序遍历结果及某一种遍历,要求输出另一种遍历。
输入
输入包括若干个测试用例,第一行为一个自然数n,表示用例个数,接下来4n行,即每个用例占4行,其中第一行表示第一种遍历方式,第二行为第一种遍历结果,第三行为第二种遍历方式,第4行为第二种遍历结果。注明:先序遍历方式用“pre”表示,中序遍历方式用“in”表示,后序遍历方式用“post”表示。
输出
对每个测试用例,输出相应的另一种遍历方式及结果。每个用例用一行输出,输出格式为先输出相应的遍历方式,然后一个冒号,再加一个空格,最后输出相应的遍历结果。
样例输入
1
pre
ABDFCEG
in
BFDAEGC
样例输出
post: FDBGECA
题目来源
DataStructure(数据结构)算法
<strong><span style="font-size:14px;">#include<iostream>#include<cstring>using namespace std;struct node{ char v; int r,l;}List[500];char in[500];int top;int weizhi[500];void Inset(int p,char k)///top是指向定点元素的下标{ // cout<<weizhi[List[p].v]<<" "<<weizhi[k]<<endl; if(weizhi[List[p].v]<weizhi[k])///判断左右子树 { if(List[p].r==0) { List[p].r = top; List[top].v = k; List[top].r=List[top].l=0; top++; } else///若根有右子树,则此右子树为根,判断其下个顶点 { Inset(List[p].r,k); } } else { if(List[p].l==0) { List[p].l = top; List[top].v = k; List[top].r=List[top].l=0; top++; } else { Inset(List[p].l,k); } }}void post(int head)///后序遍历 左右根{ if(List[head].l!=0) post(List[head].l); if(List[head].r!=0) post(List[head].r); cout<<List[head].v;}void pre(int head)///先序遍历 根左右{ cout<<List[head].v; if(List[head].l!=0) pre(List[head].l); if(List[head].r!=0) pre(List[head].r);}int main(){ int t,i,j,len; cin>>t; char s[10],g[500]; bool p; while(t--) { int k=2; p=false; top=2;///top是指向定点元素的下标 while(k--){ cin>>s; if(s[0]=='i') { cin>>in; }else{ if(s[1]=='r') p=true; cin>>g;///用来输入先序或者后序的字符串,p为真则为先序 } } if(p)///先序 { List[1].v = g[0]; List[1].r=List[1].l=0; len = strlen(g); for(i=0;in[i]!='\0';i++) { weizhi[in[i]]=i;///用来记录每个字符的前后顺序 /// cout<<int(in[i])<<" "; } /// cout<<endl; for(i=1;i<len;i++) { Inset(1,g[i]);///先序建树,传入参数位置 1,每个字符 } cout<<"post: "; post(1);///后序函数 cout<<endl; }else{ len = strlen(g);///后续建立树 List[1].v = g[len-1]; List[1].r=List[1].l=0; for(i=0;in[i]!='\0';i++) weizhi[in[i]]=i; for(i=len-2;i>=0;i--) { Inset(1,g[i]);///后续建树,用的是顺序链表 } cout<<"pre: "; pre(1); cout<<endl; } } return 0;}</span></strong>
0 0
- 遍历问题
- 遍历问题
- 遍历问题
- 马的遍历问题
- 遍历矩阵格问题
- 二叉树遍历问题
- RMS遍历问题
- 前序中序遍历问题
- 骑士遍历问题
- 马的遍历问题
- 二叉树遍历问题
- sdcard 遍历问题
- 马的遍历问题
- 数据结构《遍历问题》
- 方格遍历问题
- wikioi 1029 遍历问题
- cursor遍历的问题
- 数组遍历操作问题
- sourceinsight常用快捷键
- JavaScript框架(库)
- 【Mysql】外键级联与级联的劣势
- Android 使用ViewPager实现左右循环滑动图片
- 用c语言编写身份证号码是否合法
- 遍历问题
- JavaScript核心指南(JavaScript. The Core.)
- Android中Listview(四)--分组listview
- [LeetCode][Java] Plus One
- scheme初探-part 1
- 智能储物柜/快递柜系统解析<二>
- 手机安全卫士08
- android studio 常用快捷键
- WebForms UnobtrusiveValidationMode 需要“jquery”ScriptResourceMapping。