机试指南 3.4二叉排序树
例3.5二叉排序树
#include<stdio.h>
struct node{
node *lchild;
node *rchild;
int c;
}tree[110];
int loc;
node *create()
{
tree[loc].lchild=NULL;
tree[loc].rchild=NULL;
return &tree[loc++];
}
void preOrder(node *t)
{
printf("%d ",t->c);
if(t->lchild!=NULL)
preOrder(t->lchild);
if(t->rchild!=NULL)
preOrder(t->rchild);
}
void inOrder(node *t)
{
if(t->lchild!=NULL)
inOrder(t->lchild);
printf("%d ",t->c);
if(t->rchild!=NULL)
inOrder(t->rchild);
}
void postOrder(node *t)
{
if(t->lchild!=NULL)
postOrder(t->lchild);
if(t->rchild!=NULL)
postOrder(t->rchild);
printf("%d ",t->c);
}
node *insert(int x,node *t)
{
if(t==NULL)
{
t=create();
t->c=x;
return t;
}
if(x<t->c)
t->lchild=insert(x,t->lchild);
if(x>t->c)
t->rchild=insert(x,t->rchild);
return t;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
node *T;
T=NULL;
loc=0;
for(int i=0;i<n;i++)
{
int x;
scanf("%d",&x);
T=insert(x,T);
}
preOrder(T); printf("\n");
inOrder(T); printf("\n");
postOrder(T); printf("\n");
}
return 0;
}
例3.6 二叉搜索树
#include<stdio.h>
#include<string.h>
struct node{
node *lchild;
node *rchild;
int c;
}tree[110];
int loc;
char str1[25],str2[25];
int size1,size2;
char *str;
int *size;
node *create()
{
tree[loc].lchild=NULL;
tree[loc].rchild=NULL;
return &tree[loc++];
}
void preOrder(node *t)
{
str[(*size)++]=t->c+'0';
if(t->lchild!=NULL)
preOrder(t->lchild);
if(t->rchild!=NULL)
preOrder(t->rchild);
}
void inOrder(node *t)
{
if(t->lchild!=NULL)
inOrder(t->lchild);
str[(*size)++]=t->c+'0';
if(t->rchild!=NULL)
inOrder(t->rchild);
}
node *insert(int x,node *t)
{
if(t==NULL)
{
t=create();
t->c=x;
return t;
}
if(x<t->c)
t->lchild=insert(x,t->lchild);
if(x>t->c)
t->rchild=insert(x,t->rchild);
return t;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF&&n!=0)
{
char tmp[20];
scanf("%s",tmp);
node *t=NULL;
loc=0;
for(int i=0;tmp[i]!=0;i++)
t=insert(tmp[i]-'0',t);
size1=0;
str=str1;
size=&size1;
preOrder(t);
inOrder(t);
str1[size1]=0;
for(int i=0;i<n;i++)
{
scanf("%s",tmp);
node *t1=NULL;
loc=0;
for(int i=0;tmp[i]!=0;i++)
t1=insert(tmp[i]-'0',t1);
size2=0;
str=str2;
size=&size2;
preOrder(t1);
inOrder(t1);
str2[size2]=0;
if(strcmp(str1,str2)==0)
printf("YES\n");
else
printf("NO\n");
}
}
return 0;
}