赞
踩
课程名称:数据结构
实验项目名称:查找算法的实现与分析
实验目的:
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;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。