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