知道后/中序遍历,求前

来源:互联网 发布:软件职业技能培训学校 编辑:程序博客网 时间:2024/04/29 05:34


#include <iostream>#include <string.h>#include <stdio.h>using namespace std;struct ttt{int l,r,w;};char q1[50];char q2[50];ttt qq[500];int walked[500];int n;int gg;int tt;int tree(int x,int y,int m,int w){    cout << x <<"-----  " << y << " --- " <<endl;    int k=x;    if(x>y)return 0;    while(k<=y){       if(q1[tt]==q2[k]){        break;       }       k++;    }    if(k>y)return 0;    gg++;    qq[gg].w=tt;    int g1=gg;    cout << "YES        K= " << k<< endl;    if(m==0){        qq[w].l=g1;    }else if(m==1){        qq[w].r=g1;    }    tt--;    tree(k+1,y,1,g1);    tree(x,k-1,0,g1);}int dfs1(int n){    cout << q1[qq[n].w];    if(qq[n].l!=0)dfs1(qq[n].l);    if(qq[n].r!=0)dfs1(qq[n].r);}int dfs2(int n){    if(qq[n].l!=0)dfs2(qq[n].l);        cout << q1[qq[n].w];    if(qq[n].r!=0)dfs2(qq[n].r);}int dfs3(int n){    if(qq[n].l!=0)dfs3(qq[n].l);    if(qq[n].r!=0)dfs3(qq[n].r);    cout << q1[qq[n].w];}int main(){    freopen("in.txt","r",stdin);    int i,j,k,f1,f2,f3,t2,t3;    int m;    int t1=0;    cin >>n;    for(i=1;i<=n;i++){        cin >> q1[i];        }    for(i=1;i<=n;i++){        cin >> q2[i];        }        memset(walked,0,sizeof(walked));    gg=0;    tt=n;    tree(1,n,-1,0);    for(i=1;i<=n;i++)        cout << i <<"是" << q1[qq[i].w]<< "  左儿子是" << qq[i].l  << "右儿子是" <<qq[i].r<< endl;    dfs1(1);    cout << endl;    dfs2(1);    cout << endl;    dfs3(1);    cout << endl;    return 0;}



0 0
原创粉丝点击