hdu3791(二叉搜索树)

http://acm.hdu.edu.cn/showproblem.php?pid=3791

思路:建好二叉搜索树后,用二叉树的历遍去判断就好

#include<iostream>

#include<cstring>

using namespace std;

typedef struct tree

{

	tree *r,*l;

	int num;

}tree;

tree *root;

int a[30],b[30],count=0;

tree *creat(int x)

{

	tree *t=(tree *)malloc(sizeof(tree));

	t->r=0;

	t->l=0;

	t->num=x;

	return t;

}

tree *inster(tree *s,int x)

{

	tree *t;

	if(s==NULL)

	{

		t=creat(x);

		s=t;

	}

	else

	{

		if(x<=s->num)

			s->l=inster(s->l,x);

		else

			s->r=inster(s->r,x);

	}

	return s;

}

void libian(tree *root)

{

	if(root!=NULL)

	{

		b[count++]=root->num;

		libian(root->l);

		libian(root->r);

	}

}

int main()

{

	int n;

	while(scanf("%d",&n)>0&&n)

	{

		count=0;

		root=NULL;

		char str[30];

		scanf("%s",str);

		int len=strlen(str);

		int i,j;

		for(i=0;i<len;i++)

		{

			int tmp=str[i]-48;

			root=inster(root,tmp);

		}

		libian(root);

		for(i=0;i<len;i++)

			a[i]=b[i];

		while(n--)

		{

			count=i=0;

			scanf("%s",str);

			root=NULL;

			for(i=0;i<len;i++)

			{

				int tmp=str[i]-48;

				root=inster(root,tmp);

			}

			libian(root);

			for(i=0;i<len;i++)

				if(a[i]!=b[i])

				{

					printf("NO\n");

					break;

				}

			if(i>=len)

				printf("YES\n");

		}

	}

	return 0;

}

 

你可能感兴趣的:(HDU)