重建二叉树+递归的典型应用

//重建二叉树
#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\n",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\n",ans);
    }
    return 0;
}


你可能感兴趣的:(数据结构)