2137 数据结构实验之求二叉树后序遍历和层次遍历
2014-02-17 23:52
330 查看
数据结构实验之求二叉树后序遍历和层次遍历
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
已知一棵二叉树的前序遍历和中序遍历,求二叉树的后序遍历。
输入
输入数据有多组,第一行是一个整数t (t<1000),代表有t组测试数据。每组包括两个长度小于50 的字符串,第一个字符串表示二叉树的先序遍历序列,第二个字符串表示二叉树的中序遍历序列。
输出
每组第一行输出二叉树的后序遍历序列,第二行输出二叉树的层次遍历序列
示例输入
2 abdegcf dbgeafc xnliu lnixu
示例输出
dgebfca abcdefg linux xnuli
#include <stdio.h> #include <stdlib.h> #include <string.h> struct node { char data ; struct node *l,*r; }; struct node *build (char *a,char *b,int n) { int k=0; struct node *p; char *new; if (n<=0) return NULL; p=(struct node *)malloc(sizeof (struct node )); p->data=*a; for (new=&b[0];new <b+n;new++) { if (*new==*a) break; } k=new-b; p->l=build (a+1,b,k); p->r=build (a+1+k,new+1,n-1-k); return p; } void last (struct node *p) { if (p!=NULL) { last (p->l); last (p->r); printf ("%c",p->data); } } void cengci (struct node *t)//层次遍历,利用队列的思想 { int a=0,s=1;//a表示当前层,s表示下一层 struct node *p[10000]; p[0]=t; while (a<s) { if (p[a]) { printf("%c",p[a]->data); p[s]=p[a]->l;//先左后右,个数+1;层不变 s++; p[s]=p[a]->r; a++;s++;//个数层数都加1 } else { a++; } } } int main () { int t,n; char a[100],b[100]; while (~scanf ("%d",&t)) { while (t--) { struct node *tree; scanf ("%s%s",a,b); n=strlen (a); tree=build (a,b,n); last (tree); printf ("\n"); cengci (tree); printf ("\n"); } } return 0; }
相关文章推荐
- SDUT 2137 数据结构实验之求二叉树后序遍历和层次遍历
- (先序+中序建树)2137数据结构实验之求二叉树后序遍历和层次遍历
- 2137 数据结构实验之求二叉树后序遍历和层次遍历
- 数据结构实验之求二叉树后序遍历和层次遍历---2137
- SDUT 2137 数据结构实验之求二叉树后序遍历和层次遍历
- SDUTOJ(2137)数据结构实验之求二叉树后序遍历和层次遍历
- SDUT_2137_数据结构实验之求二叉树后序遍历和层次遍历
- SDUT-2137 数据结构实验之求二叉树后序遍历和层次遍历
- SDUT 2137 数据结构实验之求二叉树后序遍历和层次遍历
- SDUT-2137数据结构实验之求二叉树后序遍历和层次遍历
- SDUTOJ 2137--数据结构实验之求二叉树后序遍历和层次遍历
- 数据结构实验之求二叉树后序遍历和层次遍历
- 数据结构实验之求二叉树后序遍历和层次遍历
- 数据结构实验之求二叉树后序遍历和层次遍历
- 数据结构实验之求二叉树后序遍历和层次遍历
- 数据结构实验之求二叉树后序遍历和层次遍历 oj
- 数据结构实验之求二叉树后序遍历和层次遍历
- 数据结构实验之求二叉树后序遍历和层次遍历
- 数据结构实验之求二叉树后序遍历和层次遍历 SDUT
- SDUT-数据结构实验之求二叉树后序遍历和层次遍历