SDUT-2824-求二叉树的层次遍历

Problem Description

已知一颗二叉树的前序遍历和中序遍历,求二叉树的层次遍历。
Input

输入数据有多组,输入T,代表有T组测试数据。每组数据有两个长度小于50的字符串,第一个字符串为前序遍历,第二个为中序遍历。
Output

每组输出这颗二叉树的层次遍历。
Sample Input

2
abc
bac
abdec
dbeac

Sample Output

abc
abcde

Hint
Source
fmh

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct tree
{
    struct tree *left,*right;
    char data;
};

struct tree * creat(int len,char a[],char b[])
{
    int i=0;
    if(len<=0) return NULL;
    struct tree *t;
    t=(struct tree *)malloc(sizeof(struct tree));
    t->data=a[0];
    for(i=0;i<len;i++)
    {
        if(a[0]==b[i])
        {
            break;
        }
    }
    t->left=creat(i,a+1,b);
    t->right=creat(len-i-1,a+i+1,b+i+1);
    return t;
}
void arrangeshow(struct tree *t)
{
    struct tree *treenode[55];
    int in=0,out=0;
    treenode[in++]=t;
    while(in>out)
    {
        if(treenode[out]!=NULL)
        {
            treenode[in++]=treenode[out]->left;
            treenode[in++]=treenode[out]->right;
            printf("%c",treenode[out]->data);
        }
        out++;
    }
}
int main()
{
    int t,len;
    struct tree *root;
    char a[55],b[55];
    scanf("%d",&t);
    while(t--)
    {
        scanf("%s %s",a,b);
        len=strlen(a);
        root=creat(len,a,b);
        arrangeshow(root);
        printf("\n");
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_44041997/article/details/86604128