二叉木の再構成+再帰的な典型的な応用

1720 ワード

//     
#include
#include
#include
#include
#include
#include
#include
#include
#define inf 0x3f3f3f3f
#define LL long long
using namespace std;
void build(int n, char* s1, char *s2, char* s)
{
    if(n<= 0) return;
    int p= strchr(s2, s1[0])-s2; //              
    build(p, s1+1, s2, s); //        
    build(n-(p+1), s1+p+1, s2+p+1, s+p); //        
    //s[n-1] = s1[0]; //       
    printf("%c", s1[0]);
}
int main()
{
    char s1[100], s2[100], ans[100];
    while (scanf("%s %s",s1, s2)!=EOF) {
        int n=strlen(s1);
        build(n, s1, s2, ans);
        ans[n]='\0';
         //printf("%s
",ans); } return 0; }
#include
#include
#include
#include
#include
#include
#include
#include 
#define inf 0x3f3f3f3f
#define LL long long
using namespace std;
//vector G1, G2,G3;
int len;
void build(int n, char* s1, char* s2, char* s)
{
    if(n<=0) return;
    int p= strchr(s2,s1[n-1])-s2;//              
    s[0]=s1[n-1];
    build(p, s1, s2, s+1); //         ,          
    build(n-(p+1),s1+p,s2+p+1,s+p+1); //         ,         
}
int main()
{
    char s1[100], s2[100], ans[100];
    while (scanf("%s %s",s1,s2)!=EOF) {
        int n=strlen(s1);
        len=n;
        build(n, s1, s2, ans);
        ans[n]='\0';
        printf("%s
",ans); } return 0; }