题目链接<http://acm.zjnu.edu.cn/DataStruct/showproblem?problem_id=1008>//zjnu
<http://poj.org/problem?id=2255>//poj
题解:
一、递归建树,递归输出就行。
这个代码在poj上能过,zjnu上会re
#include <iostream>
#include <cstdio>
#include <string.h>
#include <string>
#include <algorithm>
using namespace std;
typedef struct BiTNode{
char data;
struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;
BiTNode* CreatBiTree(char *pre,char *in,int n){
if(n<=0) return NULL;
BiTree bt;
bt=(BiTree)malloc(sizeof(BiTree));
bt->data=pre[0];
char *p=strchr(in,pre[0]);
int len=p-in;
bt->lchild=CreatBiTree(pre+1,in,len);
bt->rchild=CreatBiTree(pre+len+1,p+1,n-len-1);
return bt;
}
void PostOrder(BiTree T){
if(T==NULL) return;
PostOrder(T->lchild);
PostOrder(T->rchild);
printf("%c",T->data);
return;
}
char a[100005],b[10005];
int main(){
while(scanf("%s%s",a,b)!=EOF){
BiTree T=CreatBiTree(a,b,strlen(a));
PostOrder(T);
printf("\n");
}
return 0;
}
二、建树和输出并排进行。题目只要求输出,就可以直接按照后序遍历的方式遍历,甚至不需要建树。
这个代码两边都可以过
#include <iostream>
#include <cstdio>
#include <string.h>
#include <string>
#include <algorithm>
using namespace std;
char a[100005],b[100005];
void CreatBiTree(char *pre,char *in,int n){
if(n<=0) return;
int len=strchr(in,pre[0])-in;
CreatBiTree(pre+1,in,len);
CreatBiTree(pre+len+1,in+len+1,n-len-1);
printf("%c",pre[0]);
}
int main(){
while(scanf("%s%s",a,b)!=EOF){
CreatBiTree(a,b,strlen(a));
printf("\n");
}
return 0;
}