帮忙看一下这段程序的功能(不必注释,只要大概说一下这段程序时干什么的)
#include<stdio.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
typedef struct BTNode
{
int data;
struct BTNode *lchild,*rchild;
}BTNode;
BTNode *root;
void Insert(BTNode *s)
{
BTNode *p,*q;
if(root==NULL)
root=s;
else
{
p=root;
while(p!=NULL) //当p为空时,q就是可插入的地方
{
q=p; //当p向子数节点移动时,q记录p的双亲的位置
if(s->data<p->data)
p=p->lchild;
else
p=p->rchild;
}
if(s->data<q->data)
q->lchild=s;
else
q->rchild=s;
}
}
int Search(BTNode *s,int n)
{
BTNode *p;
p=s;
while(p!=NULL)
{
if(n==p->data) return 1;
if(n<p->data)
p=p->lchild;
else
p=p->rchild;
}
if(p==NULL) return 0;
}
void print(BTNode *t) //中序遍历二叉排序数树得到有序数列
{
if(t!=NULL)
{
print(t->lchild);
printf("%4d",t->data);
print(t->rchild);
}
}
void main()
{
BTNode *s;
int n;
int i,k;
root=NULL;
printf("请输入十个数:(建立十个结点的二叉排序树)\n");
for(i=0;i<10;i++)
{
scanf("%d",&k);
s=(BTNode *)malloc(sizeof(BTNode));
s->data=k;s->lchild=NULL;s->rchild=NULL;
Insert(s);
}
print(root);
printf("\n请出入关键值(待查找的数)n=?");
scanf("%d",&n);
if(Search(root,n)==1) printf("找到了!");
else printf("没有找到!");
printf("\n");
}