实验5-二叉搜索树的基本操作(大作业)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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<<"("<data<<","<count<<")";

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)

{

相关文档
最新文档