通过遍历确定二叉树结构

中序遍历跟后序遍历求出前序遍历

/*
中序遍历跟后序遍历求出前序遍历
*/

#include<iostream>
#include<cstdio>
#include<cstring>

using namespace std;

char inord[30],suford[30];

void fun(int lsuf,int rsuf,int lin,int rin)
{
    int root,ls,rs;
    for(root=lin;root<=rin;root++){
        if(inord[root]==suford[rsuf]){
            break;
        }
    }
    ls=root-lin;
    rs=rin-root;
    printf("%c",inord[root]);
    if(ls>0)
        fun(lsuf,lsuf+ls-1,lin,root-1);
    if(rs>0)
        fun(lsuf+ls,rsuf-1,root+1,rin);
}

int main()
{
    while(~scanf("%s%s",suford,inord)){
        int len=strlen(inord)-1;
        fun(0,len,0,len);
        printf("\n");
    }
    return 0;
}

/*
ACBFGED ABCDEFG
DBACEGF
CDAB CBAD
BCAD
*/

前序遍历跟中序遍历求出后序遍历

/*
前序遍历跟中序遍历求出后序遍历
*/
#include <cstdio>
#include <iostream>
#include<cstring>

using namespace std;

char preord[30],inord[30];

void fun(int lpre,int rpre,int lin,int rin)
{
    int root,ls,rs;
    for(root=lin;root<=rin;root++){
        if(inord[root]==preord[lpre]){
            break;
        }
    }
    ls=root-lin;
    rs=rin-root;
    if(ls>0)
        fun(lpre+1,lpre+ls,lin,root-1);
    if(rs>0)
        fun(lpre+1+ls,rpre,root+1,rin);
    printf("%c",inord[root]);
}

int main()

{
    while(scanf("%s%s",preord,inord)!=EOF){
        int len=strlen(preord)-1;
        fun(0,len,0,len);
        printf("\n");
    }
    return 0;
}
/*
DBACEGF ABCDEFG
ACBFGED
BCAD CBAD
CDAB
*/

猜你喜欢

转载自blog.csdn.net/qq_40679299/article/details/80325836