nyoj756 重建二叉树

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include<stdio.h>  
#include<string.h>
typedef struct Tree{
char c;
Tree *lc,*rc;
}tree;
int len_mid;
tree *build(char ch)
{
tree *r=new tree;
r->c=ch;
r->lc=NULL;
r->rc=NULL;
return r;
}
char *find(char *s,char ch)
{
while(*s!=ch && *s!='\0')
s++;
return s;
}
void visit(tree *r)
{
if(r!=NULL)
{
printf("%c",r->c);
visit(r->lc);
visit(r->rc);
}
}
void creat(tree **root,char *last,char *mid ,int len)
{
if(len==0)
{
*root=NULL;
return ;
}
tree *r=build(last[len-1]);
*root=r;
char *p=find(mid,r->c);
int leftlen=strlen(mid)-strlen(p);
int rightlen=len-leftlen-1;
creat(&(r->lc),last,mid,leftlen);
creat(&(r->rc),last+leftlen,p+1,rightlen);
}
int main()
{
char last[30],mid[30];
while(~scanf("%s %s",last,mid))
{
tree *root=NULL;
len_mid=strlen(mid);
creat(&root,last,mid,len_mid);
visit(root);
printf("\n");

}
return 0;
}

我的这个太长了,再给你们看大神的代码。真是一个简洁呀。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<stdio.h>  
#include<string.h>
void ReBuild(char *pre, char *in,char *post, int len)
{
if(len>0)
{
int n =strchr(in,post[len-1])-in;
ReBuild(pre+1,in,post,n);
ReBuild(pre+n+1,in+n+1,post+n,len-n-1);
pre[0]=post[len-1];
}
}
int main()
{
char pre[30],in[30],post[30];
int len;
while(~scanf("%s%s",post,in))
{
len=strlen(post);
ReBuild(pre,in,post,len);
pre[len]=0;
puts(pre);
}
}
Share

如果你觉得本文对你有帮助,可以请我喝杯咖啡。

好吧,请你喝一杯