Description
已知一棵二叉树的中序遍历和后序遍历,求二叉树的先序遍历
Input
输入数据有多组,第一行是一个整数t (t<1000),代表有t组测试数据。每组包括两个长度小于50 的字符串,第一个字符串表示二叉树的中序遍历序列,第二个字符串表示二叉树的后序遍历序列。
Output
输出二叉树的先序遍历序列
Sample
Input
2 dbgeafc dgebfca lnixu linux
Output
abdegcf xnliu
Hint
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct node{
char c;
struct node *lt, *rt;
};
char post[50];
char in[50];
int len;
struct node *create(int len, char post[], char in[]){
struct node *root;
int i;
if(!len){
root = NULL;
return root;
}
root = (struct node *)malloc(sizeof(struct node));
root -> c = post[len - 1];
for(i = 0; i < len; i++){
if(post[len - 1] == in[i]){
break;
}
}
root -> lt = create(i, post, in);
root -> rt = create(len - i - 1, post + i, in + 1 + i);
return root;
}
void preorder(struct node *root){
if(root){
printf("%c", root -> c);
preorder(root -> lt);
preorder(root -> rt);
}
}
int main(){
int n, i;
struct node *root;
scanf("%d", &n);
for(i = 0; i < n; i++){
scanf("%s", in);
scanf("%s", post);
len = strlen(post);
//root = (struct node *)malloc(sizeof(struct node));
root = create(len, post, in);
preorder(root);
printf("\n");
}
return 0;
}