sdut oj——2137 数据结构实验之求二叉树后序遍历和层次遍历
数据结构实验之求二叉树后序遍历和层次遍历
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
已知一棵二叉树的前序遍历和中序遍历,求二叉树的后序遍历。
输入
输入数据有多组,第一行是一个整数t (t<1000),代表有t组测试数据。每组包括两个长度小于50 的字符串,第一个字符串表示二叉树的先序遍历序列,第二个字符串表示二叉树的中序遍历序列。
输出
每组第一行输出二叉树的后序遍历序列,第二行输出二叉树的层次遍历序列
示例输入
2 abdegcf dbgeafc xnliu lnixu
示例输出
dgebfca abcdefg linux xnuli
提示
来源
ma6174
示例程序
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct node { char ch; struct node *lch,*rch; }*A,M; int find(char st,char a[],int l,int r) { int k=l; while(a[k]!=st && k<=r) k++; return(k); } A creat(char pre[],char mid[],int n) { A t; int k; if(n<=0) return NULL; else { k=find(pre[0],mid,0,n); t=(A)malloc(sizeof(M)); t->ch=pre[0]; t->lch=creat(pre+1,mid,k); t->rch=creat(pre+k+1,mid+k+1,n-k-1); } return(t); } void post(A f) { if(f) { post(f->lch); post(f->rch); printf("%c",f->ch); } } void leavel(A f) { A V[1002],p; int front=0,area=0; if (f) { area++; V[area]=f; while (front<area) { front++; p=V[front]; printf("%c",p->ch); if(p->lch) { area++; V[area]=p->lch; } if(p->rch) { area++; V[area]=p->rch; } } } return; } int main() { int n; A f; char pre[1002],mid[1002]; scanf("%d",&n); getchar(); while(n--) { scanf("%s%s",pre,mid); int len=strlen(pre); f=creat(pre,mid,len); post(f); printf("\n"); leavel(f); printf("\n"); } return 0; }

浙公网安备 33010602011771号