B - 이진 정렬 트리 (두 이진 정렬 트리를 비교)

기술

정의 이진 정렬 트리입니다 : 빈 트리 또는 다음과 같은 특성을 갖는 이진 트리 중 하나는 왼쪽 하위 트리가 하늘이 아닌 경우, 모든 노드가 적은 루트 노드가 아닌 왼쪽 하위 트리의 값입니다 값, 오른쪽 서브 트리가 비어 있지 않은 경우, 다음 오른쪽 하위 트리의 값이, 모든 노드가 루트의 값보다 큰, 그 왼쪽과 오른쪽 하위 트리 이진 정렬 트리입니다. 오늘, 우리는 결정해야하는지 같은 이진 정렬 트리의 두 시퀀스
입력

다수 시작 N (1 <= N < = 20) N 결정하기 위해 필요로 표현 N = 0 때 입력단.
다음 라인은 숫자 (0 ~ 9)을 포함하는 10 이하의 시퀀스 길이의 시퀀스이며, 반복 수없이 서열 정렬 이진 트리에 따라 구성 될 수있다.
다음 n 줄은 n 개의 시퀀스가 첫 번째 순서에 각 형식이 같은 두 시퀀스가 이진 정렬 트리를 구성 할 수 있는지 여부를 확인하시기 바랍니다. (데이터 무료 트리를 보장하지)
출력을

견본

입력

2
123456789
987654321
432156789
0
출력

NO
NO

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
typedef struct node
{
    char data;
    struct node *r,*l;
} node,*Tree;
int n;
void creat( Tree&T,int m)
{
    if(T ==NULL)
    {
        T =(node*)malloc(sizeof(node)) ;
        T->r=NULL;
        T->l=NULL;
        T->data=m;
    }
    else
    {
        if(m<T->data)
        {
            creat(T->l,m);
        }
        else
        {
            creat (T->r,m);
        }
    }
}
int flag;
void Compare(Tree T1,Tree T2)
{
    if(!T1&&!T2)
        return ;
    else if(T1->data != T2->data)
    {
        flag = 1;
        return ;
    }
    else
    {
        Compare(T1->l,T2->l);
        Compare(T1->r,T2->r);
    }
}
int main()
{
    int n;
    while(~scanf("%d",&n)&&n)
    {
        if(n == 0)break;
        Tree T1=NULL;//注意
        char st[10];
        scanf("%s",st);
        int len=strlen(st);
        for(int i=0; i<len; i++)
        {
             creat(T1,st[i]);
        }
        char st1[10];
        while(n--)
        {
            flag=0;
            Tree T2=NULL;//注意
            scanf("%s",st1);
            for(int i=0; st1[i]!='\0'; i++)
            {
                creat(T2,st1[i]);
            }
            Compare(T1,T2);
            if(flag==1)
                printf("NO\n");
            else
                printf("YES\n");
        }
    }
    return 0;
}

게시 된 177 개 원래 기사 · 원 찬양 7 ·은 30000 +를 볼

추천

출처blog.csdn.net/Fusheng_Yizhao/article/details/104869546