nyoj756重建二叉树

13 篇文章 0 订阅
#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;
}

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

#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);
	}
}

哎,还是要 苦练算法。 再见

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值