最近在复习数据结构,顺便看看大一的时候写的代码,看完之后比当初有了更加深刻的体会。
希望这些能提供给初学者一些参考。
在VC++6.0下可运行,当初还写了不少注释。
【问题描述】
以输入的一组整数作为关键字的值,构造其对应的二叉排序树,并对给点的值在该二叉排序树上进行查找
【基本要求】
·输入:输入一组关键字(整数)及要查找的值
·输出:排好序的关键字及查找的结果
样例输入
60 35 69 84 96 13 66 3421 -1
40
样例输出
13 21 34 35 60 66 69 8496
40…… 没找到
【模块划分】
1. BSTInOrder()函数:中序遍历二叉排序树
2. BTSInsert()函数:在二叉排序树上插入一个结点
3. CreateBST()函数:生成二叉排序树
4. BSTSearch(): 在二叉排序树上查找,找到,返回指向该节点的指针,否则返回空指针
5. main函数:调用各函数
#include <stdio.h>
#include <malloc.h>
typedef struct BSTNode
{
int key;
struct BSTNode *lchild,*rchild;
}BSTNode,*BSTree;
BSTree f;
//中序遍历二叉排序树
void BSTInOrder(BSTree t)
{
if(t)
{
BSTInOrder(t->lchild);
printf("%-4d ",t->key);
BSTInOrder(t->rchild);
}
}
//在二叉树中查找值为k的结点
int BSTSearch(BSTree t, int k)
{
BSTree p;
p=t;
f=NULL;
while(p)
{
if(k==p->key)
return 1;
else if(k<p->key)
{
f=p;
p=p->lchild;
}
else
{
f=p;
p=p->rchild;
}
}
return 0;
}
//在二叉树t中查找关键字值为k的结点,若找不到k,则插入k
void BSTInsert(BSTree& t, int k)
{
BSTree s;
int p;
p=BSTSearch(t,k);
if(!p)
{
s=(BSTNode*)malloc(sizeof(BSTNode));
s->key=k;
s->lchild=s->rchild=NULL;
if(!t)
t=s;
else if(k<f->key)
f->lchild=s;
else
f->rchild=s;
}
}
//创建二叉排序树
BSTree CreateBST()
{
BSTree t;
int key;
//BSTree BSTInsert(BSTree t, int k);
t=NULL;
printf("输入数据\n");
scanf("%d",&key);
while(key!=-1)
{
BSTInsert(t, key);
//printf("输入数据\n");
scanf("%d",&key);
}
return t;
}
int main()
{
BSTree root;
int p,key;
root=CreateBST();
printf("二叉排序树列表\n");
BSTInOrder(root);
printf("\n输入要查找的值\n");
scanf("%d",&key);
p=BSTSearch(root,key);
if(p)
printf("%d...... 能够找到\n",key);
else
printf("%d...... 没找到\n",key);
return 0;
}