实现的功能:
------------------
1、建立二叉排序树
2、输出中序遍历结果
3、查找数据
0、退出
------------------
代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct BiNode{
int data;
struct BiNode *lchild;
struct BiNode *rchild;
}BiNode,*BiTree;
BiTree InsertBST(BiTree T,int e)//二叉树的插入
{
BiTree s;
if(!T)
{
s=(BiTree)malloc(sizeof(BiNode));
s->data=e;
s->lchild=s->rchild=NULL;
T=s;
}
else if(e<T->data)
T->lchild=InsertBST(T->lchild,e);
else if(e>T->data)
T->rchild=InsertBST(T->rchild,e);
return T;
}
BiTree CreatBST(BiTree T)//建立二叉排序树
{
int e,n,i;
printf("输入数字的个数:");
scanf("%d",&n);
printf("请输入每个数字(空格隔开):");
for(i=0;i<n;i++)
{
scanf("%d",&e);
T=InsertBST(T,e);
}
return T;
}
void InOrder(BiTree T)
{//树的中序遍历
if(T)
{
InOrder(T->lchild);
printf("%d ",T->data);
InOrder(T->rchild);
}
}
int Search(BiTree T,int key)//查找
{
BiTree p;
int x=0;
p=T;
while(p)
{
if(key<p->data)
{
p=p->lchild;
++x;
}
else if(key>p->data)
{
p=p->rchild;
++x;
}
else
{
printf("数字%d查找成功。\n",key);
printf("数字%d的查找长度为%d\n",key,x+1);
return 1;
}
}
printf("未找到数据%d。\n",key);
// printf("数字%d的查找长度为%d\n",key,x+1);
return 0;
}
int main()
{
BiTree T=NULL;
int n,key,selet;
printf("------------------\n");
printf("1、建立二叉排序树\n");
printf("2、输出中序遍历结果\n");
printf("3、查找数据\n");
printf("0、退出\n");
printf("------------------\n");
while(1)
{
printf("\n");
printf("请选择操作:");
scanf("%d",&selet);
switch(selet)
{
case 1:
T=CreatBST(T);
printf("二叉排序树建立成功!\n");
break;
case 2:
printf("中序遍历结果为:");
InOrder(T);
putchar('\n');
break;
case 3:
printf("请输入查找的关键字:");
scanf("%d",&key);
Search(T,key);
break;
case 0:
exit(0);
}
}
}
结果演示: