已知先序和中序遍历求后续遍历
#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