数据结构实验之求二叉树后序遍历和层次遍历
Time Limit: 1000MS Memory limit: 65536K
题目描述
已知一棵二叉树的前序遍历和中序遍历,求二叉树的后序遍历。
输入
输入数据有多组,第一行是一个整数t (t<1000),代表有t组测试数据。每组包括两个长度小于50 的字符串,第一个字符串表示二叉树的先序遍历序列,第二个字符串表示二叉树的中序遍历序列。
输出
每组第一行输出二叉树的后序遍历序列,第二行输出二叉树的层次遍历序列
示例输入
2 abdegcf dbgeafc xnliu lnixu
示例输出
dgebfca abcdefg linux xnuli
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <malloc.h> struct node { char data; struct node *l,*r; }; struct node *creat(int len,char *str1,char *str2) { int k; if(len<=0) return NULL; struct node *head; head = (struct node *)malloc(sizeof(struct node)); head->data = *str1; char *p; for(p = str2;p!=NULL;p++) if(*p==*str1) break; k = p-str2; head->l = creat(k,str1+1,str2); head->r = creat(len-k-1,str1+k+1,p+1); return head; } void houxu(struct node *p) { if (p) { houxu(p->l); houxu(p->r); printf("%c",p->data); } } void cenci(struct node *p) { int flag=0,r1=1; struct node *s[100]; s[0]=p; while(flag<r1) { if(s[flag]) { printf("%c",s[flag]->data); s[r1++]=s[flag]->l; s[r1++]=s[flag]->r; flag++; } else flag++; } } int main() { int len,n; char str1[100],str2[100]; struct node *head; head = (struct node *)malloc(sizeof(struct node )); scanf("%d",&n); while(n--) { scanf("%s %s",str1,str2); len = strlen(str1); head = creat(len,str1,str2); houxu(head); printf("\n"); cenci(head); printf("\n"); } return 0; }