课程名称:数据结构
实验项目名称:查找算法的实现与分析
实验目的:
1.掌握二叉排序树的创建及查找算法(递归和非递归均可)。
实验要求:
1、 创建一棵二叉排序树,并实现对该二叉排序树的查找算法。
实验过程:
1、 输入一数据序列,根据输入的数据序列创建一棵二叉排序树(二叉链表);
2、 在已创建的二叉排序树中查找“37”和“66”两个结点,并给出相应的查询结果。
实验报告中给出创建二叉排序树和二叉排序树的查找算法代码。
实验结果:
1、输入数据序列:45,24,53,12,37,93。
2、输出二叉排序树的中序遍历序列:12,24,37,45,53,93;
3、输入要查找的数据:37, 输出查找的结果:该结点已找到。
输入要查找的数据:93, 输出查找的结果:该结点未找到。
#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
typedef struct node
{
int element;
node *leftchild, *rightchild;
}*Bst,node;
bool Bstinsert(Bst &T,int m) //二叉排序树插入函数
{
if(T==NULL) //空树时建立结点并插入
{
T=new node;
T->element=m;
T->leftchild=NULL;
T->rightchild=NULL;
return true;
}
if(m==T->element) //递归地插入二叉排序树
return false;
else if(m<T->element)
{
Bstinsert(T->leftchild,m);
}
else if(m>T->element)
{
Bstinsert(T->rightchild,m);
}
}
void creat(Bst &T,int a[],int n)
{
T=NULL;
int i;
for(i=0; i<n; i++)
{
Bstinsert(T,a[i]);
}
return ;
}
void traverse(Bst &T)
{
if(T)
{
traverse(T->leftchild);
cout<<T->element<<" ";
traverse(T->rightchild);
}
}
int find(Bst &T,int q,int &p) //寻找二叉排序树中是否存在指定结点的函数
{
if(T)
{
if(T->element==q)
{
p++;
}
find(T->leftchild,q,p);
find(T->rightchild,q,p);
}
return p;
}
int main()
{
Bst T;
int n;
cout<<"请输入二叉排序树中结点的个数:";
cin>>n;
int a[n];
cout<<"请输入结点值:" ;
for(int i=0; i<n; i++)
{
cin>>a[i];
}
creat(T,a,n);
cout<<"二叉排序树的中序遍历序列:";
traverse(T);
cout<<"\n"<<"输入要查找的数据:";
int q;
while(scanf("%d",&q)!=EOF)
{
int k=0;
if(find(T,q,k)==1)
cout<<"该结点已找到"<<"\n";
else
cout<<"该结点未找到"<<"\n";
}
return 0;
}