数据结构实验报告六—BST(二叉查找树)实现动态查找表

合集下载

二叉查找树实现代码及运行结果

二叉查找树实现代码及运行结果
scanf(" %d",&keyword); //输入要查找元素的关键字
temp=SearchBST(T,keyword,NULL,p);//查找
if(!temp) printf("%d isn't existed!\n",keyword); //没有找到
else printf("%d has been found!\n",keyword); //成功找到
}
else return 0; //树中已存在关键字为e的数据元素
}
int DeleteBST(BiTree &T,int key)
{//若二叉排序树T中存在关键字等于key的数据元素时,则删除该数据元素结点
//并返回1,否则返回0
int tmp1,tmp2;
tmp1=tmp2=0;
if(!T) return 0; //不存在关键字等于key的数据元素
//则指针p指向该数据元素,并返回1,否则指针指向查找路径上访问的最后一
//个结点并返回0,指针f指向T的双亲,其初始调用值为NULL
int tmp1,tmp2;
tmp1=tmp2=0;
if(!T) {p=f;return 0;} //查找不成功
else if(key==T->data) {p=T;return 1;} //查找成功
scanf("%d",&n);
printf("Please input every node:\n");
for(int i=0;i<n;i++)//输入树的结点个数
scanf("%d",&A[i]);

数据结构试验报告 二叉排序树的操作

数据结构试验报告 二叉排序树的操作

数据结构实验报告班级:信息与计算科学专业1102班学号: 1108060214姓名:朱晓东设计日期:2013.6.6西安科技大学计算机学院1.实验报告编写一个演示运用二叉排序树进行数据的的排序、插入、删除、查找等操作的程序。

2.需求分析本演示程序用vc6.0编写,完成数据的排序功能,同时能够进行数据的创建、插入、删除、查找。

(1)输入的形式和输入值的范围:创建二叉排序树时输入较多的值;插入元素时需要输入插入的元素的值;删除元素时输入元素的值;查找操作时需要输入元素的值。

所有输入中,元素的值都是整数。

(2)输出的形式:在创建、插入、删除的操作后,均显示操作后的元素的排序状况,有小到大排序。

(3)程序所能达到的功能:完成二叉排序树的生成、插入、删除、查找操作。

(4)测试数据:①插入操作中依次输入10 9 11 8 12 0(本程序是以0元素为为结束标志);②查找操作中输入13;③插入操作中输入13;3概要设计本程序包含8个函数:(1)主函数main()(2)创建二叉排序树函数BSTCreate(BiTree* bt)(3)显示操作菜单函数menu()(4)显示二叉排序树的内容函数BSTShow(BiTree bt)(5)插入元素函数BSTInsert(BiTree* bt,DataType key)(6)删除元素函数BSTDelete(BiTree* bt,DataType key)(7)查找元素函数BSTSearch(BiTree bt,DataType key)(8)查找要删除的元素的函数DeleteNode(BiTree* bt)各函数之间的关系如下:BSTCreate(BiTree* bt)menu()BSTShow(BiTree bt)mainBSTInsert(BiTree* bt,DataType key)BSTDelete(BiTree* bt,DataType key) DeleteNode(BiTree* bt)BSTSearch(BiTree bt,DataType key)4.详细设计实现概要设计中定义的所有数据类型,对每个操作给出伪码算法。

查找-动态查找表-二叉排序树

查找-动态查找表-二叉排序树

查找-动态查找表-⼆叉排序树⽂字描述 ⼆叉排序树的定义 ⼜称⼆叉查找树,英⽂名为Binary Sort Tree, 简称BST。

它是这样⼀棵树:或者是⼀棵空树;或者是具有下列性质的⼆叉树:(1)若它的左⼦树不空,则左⼦树上所有结点的值均⼩于它的根结点的值;(2)若它的右⼦树不空,则右⼦树上所有结点的值均⼤于它的根结点的值;(3)它的左、右⼦树也分别是⼆叉排序树。

⼆叉排序树的查找 其查找过程和次优⼆叉树类似。

即当⼆叉排序树不为空时,⾸先将给定值和根结点的关键字⽐较,若相等,则查找成功,否则将依据给定值和根结点的关键字之间的⼤⼩关系,分别在左⼦树或右⼦树上继续进⾏查找。

⼆叉排序树的插⼊ 和次优查找树相对,次优查找树是⼀种静态查找表。

⽽⼆叉排序树是⼀种动态树表,其特点是,树的结构通常不是⼀次⽣成的,⽽是在查找过程中,当树中不存在关键字等于给定值的结点时再进⾏插⼊。

新插⼊的结点⼀定是⼀个新添加的叶⼦结点,并且是查找不成功时查找路径上访问的最后⼀个结点的左孩⼦或右孩⼦结点。

⼆叉排序树的删除 在⼆叉排序树上删除⼀个结点相当于删除有序序列中的⼀个纪录,只要在删除某个结点之后依旧保持⼆叉排序树的特性即可。

假设被删除结点*p(指向结点的指针为p),其双亲结点*f(结点类型为f),且不失⼀般性,可设*p是*f的左孩⼦。

下⾯分3种情况进⾏讨论: (1)若*p结点为叶⼦结点,即PL和PR均为空树。

由于删除叶⼦结点*p不破坏整棵树的结构,则只需修改其双亲结点的指针即可。

(2)若*p结点只有左⼦树PL或只有右⼦树PR,此书只要令PL或PR直接成为其双亲结点*f的左⼦树即可。

(3)若*p结点的左⼦树和右⼦树均不为空。

从下图知,在删除*p之前,中序遍历该⼆叉树的序列为{…C L C…Q L QS L SPP R F…}, 在删除*p 之后,为保持其他元素之间的相对位置不变,可以有两种⽅法:[3.1]令*p的左⼦树为*f的左⼦树,⽽*p的右⼦树为*s的右⼦树。

二叉排序树的实验报告

二叉排序树的实验报告

二叉排序树的实验报告二叉排序树的实验报告引言:二叉排序树(Binary Search Tree,简称BST)是一种常用的数据结构,它将数据按照一定的规则组织起来,便于快速的查找、插入和删除操作。

本次实验旨在深入了解二叉排序树的原理和实现,并通过实验验证其性能和效果。

一、实验背景二叉排序树是一种二叉树,其中每个节点的值大于其左子树的所有节点的值,小于其右子树的所有节点的值。

这种特性使得在二叉排序树中进行查找操作时,可以通过比较节点的值来确定查找的方向,从而提高查找效率。

二、实验目的1. 理解二叉排序树的基本原理和性质;2. 掌握二叉排序树的构建、插入和删除操作;3. 验证二叉排序树在查找、插入和删除等操作中的性能和效果。

三、实验过程1. 构建二叉排序树首先,我们需要构建一个空的二叉排序树。

在构建过程中,我们可以选择一个节点作为根节点,并将其他节点插入到树中。

插入节点时,根据节点的值与当前节点的值进行比较,如果小于当前节点的值,则将其插入到当前节点的左子树中;如果大于当前节点的值,则将其插入到当前节点的右子树中。

重复这个过程,直到所有节点都被插入到树中。

2. 插入节点在已有的二叉排序树中插入新的节点时,我们需要遵循一定的规则。

首先,从根节点开始,将新节点的值与当前节点的值进行比较。

如果小于当前节点的值,则将其插入到当前节点的左子树中;如果大于当前节点的值,则将其插入到当前节点的右子树中。

如果新节点的值与当前节点的值相等,则不进行插入操作。

3. 删除节点在二叉排序树中删除节点时,我们需要考虑不同的情况。

如果要删除的节点是叶子节点,即没有左右子树,我们可以直接删除该节点。

如果要删除的节点只有一个子树,我们可以将子树连接到要删除节点的父节点上。

如果要删除的节点有两个子树,我们可以选择将其右子树中的最小节点或左子树中的最大节点替代该节点,并删除相应的替代节点。

四、实验结果通过对二叉排序树的构建、插入和删除操作的实验,我们得到了以下结果:1. 二叉排序树可以高效地进行查找操作。

BST实验报告

BST实验报告

HUNAN UNIVERSITY课程预习报告题目:BST学生XX学生学号201208专业班级指导老师完成日期一、需求分析(1)输入的形式和输入值的X围:建表的输入:第一次输入一个正整数N,代表接下来要输入的结点值的个数。

以后输入N个整数,分别代表N个结点的值,中间用空格隔开。

输入格式为:“34 76 45 18 26 54 92 65”。

查询的输入:输入一个整数,代表需要在表中查询的值。

不对非法输入做处理,即假设输入都是合法的。

(2)输出的形式:对于需要查询的数,如果存在表中则输出“查找成功”并输出比较的次数,如果不存在表中,则输出“查找不成功,已插入表中”。

(3)程序所能达到的功能:本程序可以创建一个动态查找链表,可以对用户输入的数据进行查询,输出查询数据过程中的比较次数,对于不存在的数据还可以动态插入到正确的位置。

(4)测试数据:输入:8//BST的节点个数34, 76, 45, 18, 26, 54, 92, 65 //8个数据45//查找45输出:查找成功 3 //返回成功和查找时比较的次数34//查找34输出:查找成功 1 //返回成功和查找时比较的次数100//查找100输出:查找不成功 3 //返回成功和查找时比较的次数二、概要设计抽象数据类型对于一个具有插入和查询功能的动态查询表,可以使用顺序表和链表来实现,但是在这个查找问题中,顺序表不够链表方便,我们需要插入和检索的时间效率更高,因此选择使用二叉查找树(BST)来实现这个动态查询表。

查询表中的数据类型作为BST的结点,所以需要定义一个结点类来实现数据及其关系的存储。

结点类的ADT如下:数据类型:D=(a1,a2…ai|aiЄZ)基本操作:int val() //返回结点的数值inline Node* left()const //获取左结点inline Node* right()const //获取右结点void setLeft(Node* it) //设置左结点void setRight(Node* it) //设置右结点BST的ADT如下:数据对象:Node类型数据关系:二叉树基本操作:bool insert(const int& it) //插入元素bool find(int& it,int& count) //查找元素算法的基本思想对于用户输入的n的值来确定表中所应该有的结点个数,将结点依次输入,按照BST树的要求,每个结点的左子树的所有结点值都比该结点值小,右子树的所有结点值都比该结点值大,查询时,将用户输入的元素进行查找操作,从根结点依次比较,若该元素存在并输出比较的次数,若不存在则输出提示语句。

数据结构二叉树的实验报告

数据结构二叉树的实验报告

数据结构二叉树的实验报告数据结构二叉树的实验报告一、引言数据结构是计算机科学中非常重要的一个领域,它研究如何组织和存储数据以便高效地访问和操作。

二叉树是数据结构中常见且重要的一种,它具有良好的灵活性和高效性,被广泛应用于各种领域。

本实验旨在通过实际操作和观察,深入了解二叉树的特性和应用。

二、实验目的1. 理解二叉树的基本概念和特性;2. 掌握二叉树的创建、遍历和查找等基本操作;3. 通过实验验证二叉树的性能和效果。

三、实验过程1. 二叉树的创建在实验中,我们首先需要创建一个二叉树。

通过输入一系列数据,我们可以按照特定的规则构建一棵二叉树。

例如,可以按照从小到大或从大到小的顺序将数据插入到二叉树中,以保证树的有序性。

2. 二叉树的遍历二叉树的遍历是指按照一定的次序访问二叉树中的所有节点。

常见的遍历方式有前序遍历、中序遍历和后序遍历。

前序遍历是先访问根节点,然后再依次遍历左子树和右子树;中序遍历是先遍历左子树,然后访问根节点,最后再遍历右子树;后序遍历是先遍历左子树,然后遍历右子树,最后访问根节点。

3. 二叉树的查找二叉树的查找是指在二叉树中寻找指定的节点。

常见的查找方式有深度优先搜索和广度优先搜索。

深度优先搜索是从根节点开始,沿着左子树一直向下搜索,直到找到目标节点或者到达叶子节点;广度优先搜索是从根节点开始,逐层遍历二叉树,直到找到目标节点或者遍历完所有节点。

四、实验结果通过实验,我们可以观察到二叉树的特性和性能。

在创建二叉树时,如果按照有序的方式插入数据,可以得到一棵平衡二叉树,其查找效率较高。

而如果按照无序的方式插入数据,可能得到一棵不平衡的二叉树,其查找效率较低。

在遍历二叉树时,不同的遍历方式会得到不同的结果。

前序遍历可以用于复制一棵二叉树,中序遍历可以用于对二叉树进行排序,后序遍历可以用于释放二叉树的内存。

在查找二叉树时,深度优先搜索和广度优先搜索各有优劣。

深度优先搜索在空间复杂度上较低,但可能会陷入死循环;广度优先搜索在时间复杂度上较低,但需要较大的空间开销。

BST实验报告.doc

BST实验报告.doc

问题描述利用二叉查找树(BST)实现一个动态查找表基本要求(1)使用二叉树(BST)来实现。

(2)二叉树使用链式结构(二叉链表)实现。

(3)实现BST的构建,查找两个功能。

一需求分析1.输入的形式:输入要存储元素的个数n (正整数),n个元素的值(设为整数)和要查找元素的值;2.输出的形式:输出是否找到(查找成功\不成功)和查找时比较的次数(正整数):3.程序所能达到的功能:要求输入用户设定个元素,再输入要查找的元素,输出是否找到和查找时比较的次数;4.测试数据输入:5//BST的节点数请输入数据:43 54 32 12 57 //五个数据请输入查找数:54 //查找54输岀:查找成功2 //返回成功和查找时比较的次数请输入查找数:12 //查找12输出:查找成功3 //返回成功和查找吋比较的次数请输入查找的数:50 //查找50输出:杏找不成功3 //返回成功和查找时比较的次数二概要设计抽象数据类型的定义BST,二叉查找树,先定义一个二叉树节点,然后实现二叉查找树的功能。

数据对象:整数数据关系:数裾元素属于同一集合,是二叉树,如果对其做屮序遍历呈递增序列基本操作:遍历,二叉树的构建,查找,插入算法的基本思想将输入的BST的元素川插入的方法存进BST巾(由于BST中任何结点的左孩子小于该节点,右孩子大于该节点,所以用递归方法比较插入)。

判断输入要查找的元素是否在BST中(递归比较要查找的元素与当前元素的值的大小,若小于当前值,则查找其左子树;若大于,则查找其右子树),若在,则输出位罝;若不在,则插入到BST中,并输出其位罝程序的流程:程序由三个模块组成:(1)输人模块:输入二叉查找树的元素个数、元素的值,以及要查找的数(2)查找模块:判断该元素是否在二叉查找树中,若未找到,则插入到二叉查找树中。

(3)输出模块:输出是否找到。

若找到,则输出位置;若未找到,则输出插入的位置。

三详细设计(1)物理数据类型因为要实现一个动态杏找表,对一个数进行查找,用线性表实现所用的时间代价比较高,而用二叉查找表来实现的话时间代价显剧较低,故可以构建一个二叉查找树,来实现动态查找。

数据结构实验_BST查找树

数据结构实验_BST查找树

HUNAN UNIVERSITY实验报告题目: BST学生姓名李湃学生学号专业班级指导老师完成日期2012/4/29一、需求分析(1)利用二叉查找数(BST)实现一个动态查找表(2)输入格式:n //BST的节点个数//n个数据m //要查找的数据输出格式查找成功x //返回成功和查找时比较的次数查找不成功x //返回成功和查找时比较的次数(3)测试数据:输入:8//BST的节点个数34, 76, 45, 18, 26, 54, 92, 65 //8个数据45//查找45输出:查找成功 3 //返回成功和查找时比较的次数34//查找34输出:查找成功 1 //返回成功和查找时比较的次数100//查找100输出:查找不成功 3 //返回成功和查找时比较的次数二、概要设计抽象数据类型数据对象:查找表中元素为整数数据关系:满足二叉树所要求的基本关系。

另外,每个节点如果有左子树,则左子树中任意元素小于该节点值,如果有右子树,则右子树中任意元素大于该节点值基本操作:BST的部分基本操作,包括初始化二叉树、初始化节点,插入节点、查找和销毁等操作。

算法的基本思想根据题目要求,用二叉查找树来实现动态查找表。

插入元素e时,先判断该二叉树是否为空,若为空,将e作为该二叉树的根节点。

否则,从根节点开始,比较e与节点n 的大小。

如果e的值更小,判断n的左子树是否为空,若为空,将e作为节点n的左孩子并返回e,否则比较e与n左孩子的值,依此循环下去;如果e的值更大,判断n的右子树是否为空,若为空,将e作为节点n的右孩子并返回e,否则比较e与n右孩子的值,依此循环下去。

查找元素的算法与插入算法大同小异,从根节点开始,比较e与节点n的大小,若相等,返回True;如果e比节点n的值小,判断n的左子树是否为空,若为空,返回False,不为空则比较e与n左孩子的值,依次循环下去;如果e比节点n的值大,判断n的右子树是否为空,若为空,返回False,不为空则比较e与n右孩子的值,依次循环下去。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
请输入查找数:45//查找45
输出:查找成功3 //返回成功和查找时比较的次数
请输入查找数:34//查找34
输出:查找成功1 //返回成功和查找时比较的次数
请输入查找数:100//查找100
输出:查找不成功3 //返回成功和查找时比较的次数
注:当输入字符型数据时,程序会终止。
二、概要设计:
抽象数据类型
2 、运行程序时
提示输入数据个数并且输入数据
本程序可以实现一个动态查找表,能实现构建和查找两个功能。
提示:请输入表达式:
输出
提示:请输入查找数据:
输出:查找成功/查找不成功 并且后面注有查找次数
七、实验心得(可选)
本次实验较上次实验简单,所以做起来还算过得去。而且在实验过程中通过与同学的讨论加深了对二叉查找树的理解,对BST(二叉查找树)算法的应用有了初步的掌握。
cout<<"请输入欲查找的数:";
}
system("pause");
return 0;
}
else if(data>subroot->data)
{return searchTree(subroot->pRightChild,data);}
else if(data=subroot->data)
{cout<<"查找成功"<<i<<endl; }
}
else
{lt;<i<<endl;
输出格式:每当输入一个暑假,就输出查找成功或不成功,并且后面有
数字表示查找的次数,例如:34//查找34,输出:查找成功
1//表示查找时比较的次数。
四、调试分析
略。
五、测试结果
本实验的测试结果截图如下:
分析:当输入字符型数据时,退出查找。
六、用户使用说明(可选)
1、本程序的运行环境为windows操作系统,执行文件为BST.exe
{if(data<(*subroot)->data)
creatTree(&((*subroot)->pLeftChild),data);
else if(data>(*subroot)->data)
creatTree(&((*subroot)->pRightChild),data);}
else{*subroot=new Node;
creatTree(&((*subroot)->pRightChild),data);
}
else{
*subroot=new Node;
(*subroot)->data=data;
}
return true;
}
/*void goTree(Node* subroot){
if(subroot!=NULL){
goTree(subroot->pLeftChild);
cout<<subroot->data<<endl;
goTree(subroot->pRightChild);
}
}访问方式:中序遍历*/(此函数可不用)
int main(){
Node* p=new Node;
cout<<"请输入数据个数:"<<endl;
{ if(subroot!=NULL)
{i++;
if(data<subroot->data)
{return searchTree(subroot->pLeftChild,data);}
else if(data>subroot->data)
{return searchTree(subroot->pRightChild,data);}
(*subroot)->data=data;}
return true;}
算法的时空分析
此算法利用二叉查找树来实现,故次算法的的时间复杂度为O(N)。
输入和输出的格式
输入格式:在字符界面上输入一个数字表示节点(数据)的个数。
请输入数据个数:输入一个数字 //回车结束
请输入查找数据://输入要查找的总的数据,回车表示结束
int M,N;
cin>>M;
cout<<"请输入数据:"<<endl;
cin>>N;
p->data=N;
while(++i<M){
cin>>N;
creatTree(&p,N);
}
//goTree(p);
int x;
cout<<"请输入欲查找的数:";
while(cin>>x)
{ i=0;
searchTree(p,x);
data=0;
}
};
bool searchTree(Node* subroot,int data) //在结点subroot中查找数据data,二叉查找树
{ if(subroot!=NULL)
{i++;
if(data<subroot->data)
{return searchTree(subroot->pLeftChild,data);}
请输入查找数据://输入要查找的总的数据,回车表示结束
输出格式:每当输入一个暑假,就输出查找成功或不成功,并且后面有数字表示查找的次数,例如:34//查找34,输出:查找成功1//表示查找时比较的次数。
3、测试用例
输入:
8//BST的节点个数
请输入数据:34, 76, 45, 18, 26, 54, 92, 65 //8个数据
(2) 计算模块:利用二叉查找链表来计算,二叉树来存储。
(3 )输出模块:屏幕上显示输入要查找的数据,然后输出查找是否成功并且要输出查找次数。
三、详细设计
物理数据类型
本程序先定义二叉树的节点:
class Node //二叉树结点
{
public:
Node* pLeftChild;
Node* pRightChild;
return false;
}
}
bool creatTree(Node** subroot,int data)
{ if(*subroot!=NULL)
{if(data<(*subroot)->data)
creatTree(&((*subroot)->pLeftChild),data);
else if(data>(*subroot)->data)
BST,二叉查找树,先定义一个二叉树节点,然后实现二叉查找树的功能。
算法的基本思想
根据题目要求,要利用二叉查找树(BST)来实现,所以先使用链式结构(二叉链表)实现二叉查找树,然后再进行调用。
算法的基本思想是:先定义一个二叉树节点,然后实现二叉查找树的功能。
程序的流程
程序由三个模块组成:
(1) 输入模块:输入一个数据表示数据的个数,然后输入一组数据即是二叉树节点处的数据。
BST(二叉查找树)实现动态查找表
问题描述:
利用二叉查找树(BST)实现一个动态查找表。
一、需求分析:
1、本程序是利用二叉查找树(BST)来实现;二叉树使用链式结构(二叉链表)实现;本程序要实现BST的构建,查找两个功能。
2、输入输出格式:
输入格式:在字符界面上输入一个数字表示节点(数据)的个数。
请输入数据个数:输入一个数字 //回车结束
int data;
Node()
{ pLeftChild=NULL;
pRightChild=NULL;
data=0;
}
};
然后在结点subroot中查找数据data ,实现二叉查找树的功能:
bool searchTree(Node* subroot,int data) //在结点subroot中查找数据data,二叉查找树
附录(实验代码):
#include<iostream>
using namespace std;
int i=0;
class Node //二叉树结点
{
public:
Node* pLeftChild;
Node* pRightChild;
int data;
Node()
{ pLeftChild=NULL;
pRightChild=NULL;
else if(data=subroot->data)
{cout<<"查找成功"<<i<<endl; }
}
else
{cout<<"查找不成功"<<i<<endl;
return false;}
}
bool creatTree(Node** subroot,int data)
{ if(*subroot!=NULL)
相关文档
最新文档