LeeBlog

导航

HDU 3791

这个题是考数据结构的二叉排序树,对每个输入的字符串都建立一棵二叉树,然后进行先序遍历,进行后序遍历( 因为由两个遍历可以确定一棵树 ),所以每次只要先建立一棵树,然后把他们的先序遍历和后序遍历比较,若都相等就YES,否则NO

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct Node
{
    int data;
    struct Node *lc,*rc;
}node,*Link;
int n,f,c,cnt;
char f1[11],la1[11],f2[11],la2[11];
void insert( Link *L,int x )
{
    if( *L )
    {
        if( x < ( *L ) -> data )
            insert( &( *L ) -> lc , x );
        else
            insert( &( *L ) -> rc , x );
    }
    else
    {
        *L = new node;
        ( *L ) -> data = x;
        ( *L ) -> lc = ( *L ) -> rc = NULL;
    }
}
void print1(Link L,char f[] )
{
    if( L )
    {
        f[cnt++] = L ->data + '0';
        print1( L -> lc ,f);
        print1( L -> rc ,f);
    }
}
void print2( Link L, char la[] )
{
    if( L )
    {
        print2( L -> lc, la );
        print2( L -> rc, la );
        la[cnt++] = L -> data + '0' ;
    }
}
int main(  )
{
    while( scanf( "%d",&n ),n )
    {
        f = 1;
        Link L = NULL;
        Link L1 = NULL;
        char str[11];
        scanf( "%s",str );
        c = strlen( str );
        for( int i = 0; i < c; ++i )//建立一棵树
            insert( &L , str[i] - '0' );
        cnt = 0;
        print1( L ,f1);//先序遍历
        f1[cnt] = 0;
        cnt = 0;
        print2( L,la1 );//后序遍历
        la1[cnt] = 0;
        for( int i = 0; i < n; ++i )
        {
            f = 1;
            memset( f2,0,sizeof( f2 ) );
            memset( la2,0,sizeof( la2 ) );
            scanf( "%s",str );
            c = strlen( str );
            for( int i = 0; i < c; ++i )//建立一棵树
                insert( &L1, str[i] - '0' );
            cnt = 0;
            print1( L1,f2 );//先序遍历
            f2[cnt] = 0;
            cnt = 0;
            print2( L1,la2 );//后序遍历
            la2[cnt] = 0;
            if( strcmp( f1,f2 ) != 0 || strcmp( la1,la2 ) != 0 )
                f = 0;//若有不相等
            free( L1 );
            L1 = NULL;
            puts( f ? "YES" : "NO" );
        }
        free( L );
        L = NULL;
    }
    return 0;
}

posted on 2011-06-13 19:14  LeeBlog  阅读(789)  评论(0编辑  收藏  举报