题目1009:二叉搜索树
法2、树的二叉存储法
/*
*/
#include <stdio.h>
#include<string.h>
int n,cnt,size;
char tmpAns[30];
struct Node{
char num;
Node* lchild;
Node* rchild;
}Tree[20000];
Node* create()//申请某个静态数组单元 以供 接下来插入数据。
{
Tree[cnt].lchild=Tree[cnt].rchild=NULL;
Tree[cnt].num=0;
return &Tree[cnt++]; //返回当前申请的地址单元Tree[cnt],然后cnt自动加1.
}
Node* insert(Node* T,char x) //把某个元素插入树中。
{
if(T==NULL){
T=create();
T->num=x;
return T;
}
else if(x<T->num)
T->lchild=insert(T->lchild,x);
else if(x>T->num)
T->rchild=insert(T->rchild,x);
return T;
}
void preOrder(Node* T){
if(T==NULL)
return;
tmpAns[size++]=T->num;
if(T->lchild!=NULL)
preOrder(T->lchild);
if(T->rchild!=NULL)
preOrder(T->rchild);
}
void inOrder(Node* T){
if(T==NULL)
return;
if(T->lchild!=NULL)
inOrder(T->lchild);
tmpAns[size++]=T->num;
if(T->rchild!=NULL)
inOrder(T->rchild);
}
int main()
{
int i,j;
char s[15],str[30],tmp[30];
// freopen("G:\\in.txt", "r", stdin);
while(scanf("%d",&n)!=EOF){
if(n==0) break;
for(i=0;i<30;i++) //初始化字符串
str[i]=tmpAns[i]=0;
cnt=size=0;
getchar();
gets(s);
Node* T=NULL; //创建一棵树根为空。
cnt=size=0; //cnt=0表示从第0个结点开始申请起。
for(i=0;s[i]!=0;i++)
T=insert(T,s[i]);
//处理s--构造一颗二叉排序树。把前序+中序遍历结果存到一个字符数组str[]里.
preOrder(T);
inOrder(T);
strcpy(str,tmpAns);
for(j=0;j<n;j++){ //-----------------内层循环用了i,外层就不要再用!!!!!!!!
gets(s);
Node* T1=NULL;
for(i=0;i<30;i++) //初始化字符串
tmp[i]=tmpAns[i]=0;
cnt=size=0; //cnt-记录申请的单元数,size-记录
//处理-------------------------------------------------tmp[]-----
for(i=0;s[i]!=0;i++)
T1=insert(T1,s[i]);
preOrder(T1);
inOrder(T1);
strcpy(tmp,tmpAns);
if(strcmp(str,tmp)==0)
printf("YES\n");
else
printf("NO\n");
}
}
return 0;
}