遍历命名
根据访问结点操作发生位置命名:
① NLR:前序遍历(Preorder Traversal 亦称(先序遍历))
——访问根结点的操作发生在遍历其左右子树之前。
(中 左 右)
② LNR:中序遍历(Inorder Traversal)
——访问根结点的操作发生在遍历其左右子树之中(间)。
(左 中 右)
③ LRN:后序遍历(Postorder Traversal)
——访问根结点的操作发生在遍历其左右子树之后。
(左 右 中)

1. 先,中序遍历转后序遍历
如:DBACEGF ABCDEFG
输出 ACBFGED

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace  std;
void solve(char *s,char *t){
    int i,k;
    char t2[100],s2[100];
    if(strlen(s)==1) printf("%s",s);
    else
    {
        k=strchr(t,s[0])-t;//找到根节点 
        if(k>0){//左子树
            strncpy(t2,t,k);
            t2[k]='\0';
            strncpy(s2,s+1,k);
            s2[k]='\0';
            solve(s2,t2);
        } 
        if(k<strlen(t)-1){//右子树
            strncpy(t2,t+k+1,strlen(t)-k-1);
            t2[strlen(t)-k-1]='\0';
            strncpy(s2,s+k+1,strlen(s)-k-1);
            t2[strlen(s)-k-1]='\0';
            solve(s2,t2);
        }
        printf("%c",t[k]);
    } 
}
int main(){
    char a[100],b[100];
    scanf("%s",a);
    scanf("%s",b);
    solve(a,b);
    return 0;
}

2.后,中续转先序

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace  std;
void solve(char *s,char *t){
    int i,k;
    char t2[100],s2[100];
    if(strlen(s)==1) printf("%s",s);
    else
    {
        k=strchr(t,s[0])-t;
        if(k>0){
            strncpy(t2,t,k);
            t2[k]='\0';
            strncpy(s2,s+1,k);
            s2[k]='\0';
            solve(s2,t2);
        } 
        if(k<strlen(t)-1){
            strncpy(t2,t+k+1,strlen(t)-k-1);
            t2[strlen(t)-k-1]='\0';
            strncpy(s2,s+k+1,strlen(s)-k-1);
            t2[strlen(s)-k-1]='\0';
            solve(s2,t2);
        }
        printf("%c",t[k]);
    } 
}
int main(){
    char a[100],b[100];
    scanf("%s",a);
    scanf("%s",b);
    solve(a,b);
    return 0;
}