이미 한 그루의 두 갈래 나무의 앞차례 두루 다니기와 중간차례 두루 다니기, 두 갈래 나무의 뒷차례 두루 다니기와 층차 두루 다니기를 구하다

2093 단어

데이터 구조 실험의 두 갈래 트리 뒷차례 반복과 차원 반복


Time Limit: 1000 ms Memory Limit: 65536 KiB
Submit Statistic
Problem Description
이미 한 그루의 두 갈래 나무의 앞차례 두루 다니기와 중간차례 두루 다니기를 알고 있으며, 두 갈래 나무의 뒷차례 두루 다니기와 층차 두루 다니기를 구한다.
Input
입력 데이터가 여러 그룹이고 첫 번째 줄은 정수 t(t<1000)로 t그룹 테스트 데이터가 있음을 나타낸다.각 그룹은 길이가 50보다 작은 두 개의 문자열을 포함하는데, 첫 번째 문자열은 두 갈래 나무의 선순 역행 서열을 나타내고, 두 번째 문자열은 두 갈래 나무의 중순 역행 서열을 나타낸다.
Output
각 그룹의 첫 번째 줄은 두 갈래 트리의 뒷차례 역행 서열을 출력하고, 두 번째 줄은 두 갈래 트리의 차원 역행 서열을 출력한다.
Sample Input
2
abdegcf
dbgeafc
xnliu
lnixu

Sample Output
dgebfca
abcdefg
linux
xnuli
#include 
#include 
char s[1500];
int i;
typedef struct
{
    char data;
    struct tree *Lchild;
    struct tree *Rchild;
}tree;

struct tree * pai(char *xian, char *zhong, int len)
{
    if(len == 0)
        return NULL;
    tree *temp = (tree *)malloc(sizeof(tree));
    temp -> data = *xian;
    int i;
    for(i=0;i Lchild = pai(xian+1, zhong, i);
    temp -> Rchild = pai(xian+i+1, zhong+i+1,len-i-1);
    return temp;
};




levelshow(tree *head)
{
    tree *temp[100];
    int front=0, rear=-1;
    temp[++rear] = head;
    while(rear>=front)
    {
        if(temp[front])
        {
        printf("%c", temp[front]->data);
        temp[++rear] = temp[front]->Lchild;
        temp[++rear] = temp[front]->Rchild;
        }
        front++;
    }

}

postshow(tree *temp)
{
    if(temp)
    {
        postshow(temp->Lchild);
        postshow(temp->Rchild);
        printf("%c", temp->data);
    }
}

int main()
{
    char zhong[100], xian[100];
    int i, len;
    tree *head;
    int n;
    scanf("%d", &n);
    while(n--)
    {
    scanf("%s", xian);
    scanf("%s", zhong);
    len = strlen(zhong);
    head = pai(xian, zhong, len);// 
    postshow(head);
    printf("
"); levelshow(head);// printf("
"); } return 0; }

좋은 웹페이지 즐겨찾기