已知先序和中序遍历求后续遍历

#include<bits/stdc++.h>
using namespace std;
char a[100010];
char b[100010];
char c[100010];
int cnt;
void digui(int start,int n,int s,int e){
    char x=a[cnt];
    cnt++;
    if(start==n||s==e||s>e) return;
    c[e]=x;
   // printf("+++%d %d %d %d %d %c\n",start,n,cnt,s,e,x);
    int ge=s;
    int eend;
    for(int i=start;i<=n;i++){
        if(ge>e) break;
        if(b[i]==x){
            eend=i;
            continue;
        }
       // printf("%d %d %c %c\n",ge,i,c[ge],b[i]);
        c[ge]=b[i];
        ge++;
    }
   // printf("%s\n",c);
   // printf("%d\n",eend);
    int chang=eend-start;
    if(start<=eend-1) digui(start,eend-1,start,eend-1);
    if(eend+1<=n) digui(eend+1,n,eend,e-1);
}
int main()
{
    scanf("%s",a);
    scanf("%s",b);
    int len=strlen (a);
    cnt=0;
    digui(0,len-1,0,len-1);
    printf("%s\n",c);
    return 0;
}
/*
GDAFEMHZ
ADEFGHMZ
*/
/*
DBACPMZX
ABCDMPXZ
*/

      这个代码自己瞎写的555,不知道有没有大佬能给指出点问题,这个bug调的我很难受了

 

      理解起来很简单首先通过前序遍历求得根,然后通过中序遍历求的左子树和右子树,递归下去,因为我是存在数组里的所以很难受,感觉会有很多bug

posted @ 2019-01-16 16:02  快乐的黄鳝  阅读(248)  评论(0编辑  收藏  举报