1. 题目
示例输入
ABDFGCEH
BFDGACEH
示例输出
FGDBHECA
2. 代码
前序序列和中序序列可以确定一个二叉树。(yysy,我的这个代码如果遇到中间有两个相同字母的应该就不对了orz,先就这样吧)
//ABDFGCEH
//BFDGACEH
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct node{
char data;
struct node *lchild;
struct node *rchild;
}BTree;
char pre[100], in[100];
BTree* PreInOrd(char *P, char *I, int i1, int j1, int i2, int j2){
if(i1 > j1 || i2 > j2) return NULL;
BTree *t = (BTree*)malloc(sizeof(BTree));
t->data = P[i1];
int m = i2;
while(I[m] != t->data) m++;
t->lchild = PreInOrd(P, I, i1+1, i1+m-i2, i2, m-1);
t->rchild = PreInOrd(P, I, i1+m-i2+1, j1, m+1, j2);
return t;
}
void PostOrdOutput(BTree *t){
if(t != NULL){
PostOrdOutput(t->lchild);
PostOrdOutput(t->rchild);
printf("%c", t->data);
}
}
int main(int argc, char *argv[]) {
scanf("%s", &pre);
getchar();
scanf("%s", &in);
getchar();
int len = strlen(pre);
BTree *t = PreInOrd(pre, in, 0, len-1, 0, len-1);
PostOrdOutput(t);
return 0;
}