心如止水
Je n'ai pas le temps
posts - 400,comments - 130,trackbacks - 0

通过后序序列找根结点,在中序序列中分成两部分。

以下是我的代码:

#include<stdio.h>
#include
<string.h>
char s1[30],s2[30];
int pos(char s[],char x)
{
    
int i=-1;
    
while(s[++i]!=x);
    
return i;
}

void solve(int begin1,int end1,int begin2,int end2)
{
    
int m;
    m
=pos(s1,s2[end2]);
    printf(
"%c",s2[end2]);
    
if( m>begin1 )
       solve(begin1,m
-1,begin2,begin2-begin1+m-1);
    
if( m<end1 )
       solve(m
+1,end1,end2-end1+m,end2-1);
}

int main()
{
    gets(s1);
    gets(s2);
    solve(
0,strlen(s1)-1,0,strlen(s2)-1);
    putchar(
'\n');
return 0;
}

posted on 2010-01-06 20:12 lee1r 阅读(243) 评论(1)  编辑 收藏 引用 所属分类: 题目分类:递推/递归

FeedBack:
# re: vijos P1132 求二叉树的先序序列
2013-12-01 19:17 | fengyu123
问一下博主:这个两个式子中solve(begin1,m-1,begin2,begin2-begin1+m-1);
solve(m+1,end1,end2-end1+m,end2-1);
为什么要begin2-begin1和end2-end1?求解释。  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理