实验5-二叉搜索树的基本操作(大作业)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
浙江大学城市学院实验报告
课程名称数据结构与算法
实验项目名称实验五二叉搜索树的基本操作
学生姓名专业班级计算0 学号30
实验成绩指导老师(签名)日期
一.实验目的和要求
1.掌握二叉搜索树的基本概念。
2.掌握二叉搜索树基本操作的实现。
二. 实验内容
1.设在一棵二叉搜索树的每个结点的data域中,含有关键字key域和统计相同关键字元素个数的count域。当向该树插入一个元素时,若树中已有相同关键字值的结点,则使该结点的count域值增1,否则由该元素值生成一个新结点插入到该树中,并使其count域置为1。当向该树删除一个元素时,若树中该元素结点的count域值大于1,则使该结点的count域值减1,否则(count域值等于1)删除该结点。请编写程序实现该二叉搜索树的下述基本操作:
①初始化该二叉搜索树void InitBSTree(BTreeNode *&bst);
②以广义表形式输出该二叉搜索树(每个结点输出内容包括关键字值与相同
元素个数值)void PrintBSTree(BTreeNode *bst);
③插入一个元素到该二叉搜索树(用非递归算法实现)void Insert
(BTreeNode *&bst, ElemType item);
④从二叉搜索树中删除某个元素(用非递归算法实现)int Delete
(BTreeNode *&bst , ElemType item)。
⑤求该二叉搜索树的最大关键字值(用非递归算法实现)ElemType
MaxBSTree(BTreeNode *bst)。
把二叉搜索树的结构定义及基本操作实现函数存放在文件BSTree.h中。2.建立主程序文件test5.cpp,在主函数main()中通过调用BSTree.h中的函数进行测试。提示:可以在主函数中首先初始化二叉搜索树;然后从键盘输入数据,通过循环调用插入算法建立二叉搜索树;再以广义表形式输出该二叉搜索树;输出二叉搜索树中的最大结点值;最后调用删除算法删除某元素,并输出删除后的二叉搜索树。
3.填写实验报告,实验报告文件取名为report5.doc。
4.上传实验报告文件report5.doc与源程序文件BSTree.h及test5.cpp 到Ftp服务器上你自己的文件夹下。
二.函数的功能说明及算法思路
void InitBSTree(BTreeNode *&bst):初始化该二叉搜索树
void PrintBSTree(BTreeNode *bst):通过指针对树遍历,从而输出二叉树void Insert (BTreeNode *&bst, ElemType item):通过比较所插入数于树左右结点比较插入适当的位置。
int Delete (BTreeNode *&bst , ElemType item):用非递归算法实现删除某个元素。
ElemType MaxBSTree(BTreeNode *bst):通过各个结点的比较查找最大数。
包括每个函数的功能说明,及一些重要函数的算法实现思路三. 实验结果与分析
包括运行结果截图等
当搜索二叉树中有相同的数时,发现少了一个,求解
五. 心得体会
通过此次编程,我就觉的除了删除某个结点的程序有些的难度,尤其是要用非递归的算法来编写,本生编程能力就比较弱,需要和同学一起探讨,交流才能勉强写出来,不过这也是对自己的锻炼。
【附录----源程序】
Test5.Cpp
#include
#include
#include
typedef int ElemType;
struct BTreeNode
{
ElemType data,count;
BTreeNode* left;
BTreeNode* right;
};
#include"BSTree.h"
void main()
{
int data,item;
BTreeNode* bst;
InitBSTree(bst);
cout<<"请输入二叉树(data=0结束)"< cin>>data; while(data!=0) { Insert(bst,data); cin>>data; } cout<<"输出二叉树为:"; PrintBSTree(bst); cout< cout<<"输出二叉树中最大元素:"< cout< cout<<"删除二叉树中一个元素"< cout<<"输入要删除的元素值item:"; cin>>item; Delete (bst,item); PrintBSTree(bst); cout< } BSTree.h void InitBSTree(BTreeNode *&bst) { bst=NULL; } void PrintBSTree(BTreeNode *bst) { if(bst!=NULL) { cout<<"("< if(bst->left!=NULL||bst->right!=NULL) { cout<<'('; PrintBSTree(bst->left); if(bst->right!=NULL) cout<<','; PrintBSTree(bst->right); cout<<')'; } } } void Insert(BTreeNode *&bst, ElemType item) {