九度:1009<二叉搜索树><二叉排序树><建立二叉树><遍历>

http://ac.jobdu.com/problem.php?pid=1009


// 浙大10机试
// 九度:1009
// 
// 二叉排序(搜索)树的建立、存储
// 数的先序,后序,中序遍历
// 通过先序+中序、中序+后序、中序+层次可以唯一的确定一棵二叉树

// 当需要使用时,这些创建节点,建立二叉排序树、先、中、后遍历,
// 骨架不需要改变,改变的仅仅是visit(T->data);的操作及
// main函数中的控制


#include <stdio.h>
#include <string.h>


struct Node
{
	Node *lc;
	Node *rc;
	char data;
};

Node Tree[300];//所有的书,都保存在这个数组中,每建一个树,建立一个跟指针就可以了
int loc;//必不可少,仅仅在while内初始化一次
char str1[25], str2[25];
int size1, size2;
char *str;//设置全局指针后,就可以访问字符串,而不需要在函数切换时传值
int *size;//先序遍历与中序遍历的结果连接起来保存在一个字符串中


Node *Creat()
{
	Tree[loc].lc = Tree[loc].rc = NULL;
	return &Tree[loc++];
}


void Pre(Node *T)
{
	str[(*size)++] = T->data;
	if(T->lc != NULL)
	{
		Pre(T->lc);
	}
	if(T->rc != NULL)
	{
		Pre(T->rc);
	}
}


void In(Node *T)
{
	
	if(T->lc != NULL)
	{
		In(T->lc);
	}
	str[(*size)++] = T->data;
	if(T->rc != NULL)
	{
		In(T->rc);
	}
}

Node *Insert(Node * T, char ch)
{
	if(T == NULL)
	{
		T=Creat();
		T->data = ch;
		//return T;
	}
	else if(T->data < ch)
	{
		T->rc = Insert(T->rc, ch);
	}
	else if(T->data > ch)
	{
		T->lc = Insert(T->lc, ch);
	}
	return T;
}


int main()
{
#ifdef ONLINE_JUDGE
#else
	freopen("E:\\in.txt", "r", stdin);
	//freopen("E:\\out.txt", "w", stdout);
#endif


	int n;
	while(scanf("%d", &n) && n != 0)
	{
		Node *T1 = NULL;
		loc=0;//仅仅在此初始化

		char s[12];
		scanf("%s", s);
		for(int i=0; s[i] != 0; i++)
		{
			T1=Insert(T1, s[i]);
		}

		size1=0;//变量使用前初始化
		str = str1;
		size = &size1;
		Pre(T1);
		In(T1);
		str1[size1]=0;

		while(n--!=0)
		{
			Node *T2 = NULL;
			scanf("%s", s);
			for(int i=0; s[i] != 0; i++)
			{
				T2=Insert(T2, s[i]);
			}
			size2=0;
			str = str2;
			size = &size2;
			Pre(T2);
			In(T2);
			str2[size2]=0;

			puts(strcmp(str1, str2)==0 ? "YES":"NO");
		}
	}
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值