前序+中序->后序 中序+后序->前序

 

前序+中序->后序

 

#include <bits/stdc++.h>
using namespace std;

struct node
{
    char elem;
    node* l;
    node* r;
};
node* dfs(char* pre,char* in,int len)  //前序首地址、中序首地址、整个数组对应的长度
{
    int i;
    if(len==0)
        return NULL;
    node* =new node;
    s->elem=*(pre);
    for(i=0; i<len; i++)
        if(in[i]==*(pre))
            break;
    //cout<<s->elem; 前序
    s->l=dfs(pre+1,in,i);
    //cout<<s->elem; 中序
    s->r=dfs(pre+1+i,in+i+1,len-1-i);
    cout<<s->elem; //后序
    return s;
}
int main()
{
    char s1[31],s2[31];
    while(~scanf("%s",s1))
    {
        cin>>s2;
        int len=strlen(s1);
        node* s=dfs(s1,s2,len);
        cout<<endl;
    }
    return 0;
}

 

中序+后序->前序

#include <bits/stdc++.h>
using namespace std;

struct node
{
    char elem;
    node* l;
    node* r;
};
node* dfs(char* in,char* post,int len)
{
    if(len == 0) return NULL;
    node *s = (node *)malloc(sizeof(node));
    s->elem = *(post+len-1);
    int i;
    for(i=len-1; i>=0; i--)
    {
        if(in[i] == s->elem)
            break;
    }
    printf("%c", s->elem);
    s->l = dfs(in, post, i);
    s->r = dfs(in+i+1, post+i, len-1-i);
    return s;
}
int main()
{
    char s1[31],s2[31];
    while(~scanf("%s",s1))
    {
        cin>>s2;
        int len=strlen(s1);
        node* s=dfs(s1,s2,len);
        cout<<endl;
    }
    return 0;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值