已知中后序遍历,求前序遍历的程序错误
  • 板块学术版
  • 楼主pencil
  • 当前回复16
  • 已保存回复16
  • 发布时间2021/1/19 20:21
  • 上次更新2023/11/5 04:39:33
查看原帖
已知中后序遍历,求前序遍历的程序错误
137723
pencil楼主2021/1/19 20:21
#include<bits/stdc++.h>
using namespace std;
const int N=30;
int a[N][3];
char z[N],h[N],r;
int n,zl,l,x=0;
void zh(int s,int e,int li,int wei){
    char g=h[e];
    int i=0;
    if(e-s==1){
        x++;
        a[x][0]=e;
        a[li][wei]=e;
        x++;
    }
    for(i=s;i<=e;i++){
        if(g==z[i])
        break;
    }
    x++;
    a[x][0]=i;
    a[li][wei]=i;
    if(s==i-1)
    a[x][1]=s;
    else
    zh(s,i-1,x,1);
    if(i+1==e)
    a[x][2]=e;
    else
    zh(i+1,e,x,2);
}
void qian(int x){
    cout<<z[a[x][0]];
    if(a[x][1]) qian(a[x][1]);
    if(a[x][2]) qian(a[x][2]);
}
//void zzh(int zuo,int y){
//  if(zuo==y)  return;
//  int i;
//  for(i=zuo;i<=y;i++)
//  if(h[y-1]==z[i])
//  break;
//  x++;
//  a[y][1]=x;
//  zzh(zuo,x);
//  yzh(x+1,y);
//}
//void yzh(int zuo,int y){
//  if(zuo==y)  return;
//  int i;
////    for(i=zuo;i<=y;i++)
////    if(h[y-1]==z[i])
////    break;
////    x++;
//  a[y][1]=y-1;
//  zzh(zuo,x);
//  zzh(x+1,y);
//}
int main() {
    int i;
    cin.getline(z,27);
    cin.getline(h,27);
    l=strlen(z);
//  hl=strlen(h);
//  r=z[zl-1];
    zh(0,l-1,1,0);
//  for(i=0;i<zl;i++)
//  if(r==h[i]) break;
//  zzh(0,i);
qian(1);
    return 0;
}
2021/1/19 20:21
加载中...