ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:32.53KB ,
资源ID:5808159      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5808159.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构课程设计实验报告二叉树的实现.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构课程设计实验报告二叉树的实现.docx

1、数据结构课程设计实验报告二叉树的实现数据结构实验报告题目:_二叉树的实现 学号:_ _姓名:_ _东南大学成贤学院计算机系实验题目一、实验目的1.掌握二叉树的基本操作,理解递归算法。二、实验内容1将下图所示二叉树采用二叉链表进行存储,然后进行各种操作测试。三、实验步骤1.启动:开始菜单程序Microsoft Visual Studio 6.0 2.建立工程:文件(File)新建(new)在弹出的对话框中选择工程标签(Project)选中选项:Win32 Console Application(不能选别的)输入工程名(Project Name)选择工程的存放位置(Location)单击“确定”按

2、钮(OK)在弹出的对话框中选中选项:An Empty Project单击“完成”按钮(Finish)在弹出的对话框中单击“确定”按钮( OK )。3.创建头文件:文件(File)新建(new)在弹出的对话框中选择文件标签(Files) 选中选项:C/C+ Header File输入头文件名(此处定义为“”)单击“确定”按钮(OK)。内容如下:/ 二叉树结点类模板 template struct BinTreeNode/ 数据成员: ElemType data; / 数据域 BinTreeNode *leftChild; / 左孩子 BinTreeNode *rightChild; / 右孩子;

3、4.创建头文件:文件(File)新建(new)在弹出的对话框中选择文件标签(Files) 选中选项:C/C+ Header File输入头文件名(此处定义为“”)单击“确定”按钮(OK)。 定义了链队的类模板,代码如下:#ifndef _BINNARY_TREE_H_#define _BINNARY_TREE_H_/ 二叉树类模板template class BinaryTreeprivate:/ 二叉树的数据成员: BinTreeNode *root;/ 二叉树的私有函数: void PreOrderHelp(BinTreeNode *r); / 先序遍历void InOrderHelp(B

4、inTreeNode *r); / 中序遍历void PostOrderHelp(BinTreeNode *r);/ 后序遍历void Creat(BinTreeNode *r, int flag, ElemType empty, ElemType end);/递归创建子树BinTreeNode *GetRoot(); /返回根指针BinTreeNode *Locate(BinTreeNode *r, ElemType e); /查找元素值为e的结点,返回指针.BinTreeNode* LeftChild(ElemType e); /定位指定元素的左孩子,返回其指针。BinTreeNode*

5、Parent(BinTreeNode*r, ElemType e); /定位指定元素的父结点BinTreeNode* LeftSibling(ElemType e); /定位指定元素的左兄弟int Size(BinTreeNode *r); int Depth(BinTreeNode *r); int Leaf(BinTreeNode *r); /统计并返回叶子结点个数void Clear(BinTreeNode *r); void DisplayTreeeHelp(BinTreeNode *r, int level);/ 按树状形式显示以r为根的二叉树,level为层次数,可设根结点的层次数

6、为1public:/ 二叉树公共方法声明:BinaryTree(); / 无参数的构造函数模板void CreateBiTree();/ 构造二叉树 BinTreeNode *GetRoot(); / 返回二叉树的根void InOrder(); / 二叉树的中序遍历 void PreOrder(); / 二叉树的先序遍历void PostOrder(); / 二叉树的后序遍历void LevelOrder(); /按层遍历int Locate(ElemType e); /查找元素值为e的结点。int GetLeft(ElemType e, ElemType &c); /读取指定元素的左孩子i

7、nt GetParent(ElemType e, ElemType &f); /读取指定元素的父元素int GetLeftSibling(ElemType e, ElemType &s); /读取指定元素的左兄弟int InsertChild(ElemType e,ElemType x,ElemType y);/为指定元素 e 插入左、右孩子int SetElem(ElemType e, ElemType x);/更新指定元素int Size( ); int Depth( ); int Leaf( ); /统计并返回叶子结点个数virtual BinaryTree();/ 销毁二叉树void

8、DisplayTree();函数实现由学生自己完成#endif5. 创建源程序文件main.cpp:文件(File)新建(new)在弹出的对话框中选择文件标签(Files) 选中选项:C+ Source File输入源程序文件名(main)单击“确定”按钮(OK)。文件内容如下:#include binary_tree.h / 二叉树类int main(void)利用swtich构造菜单,对二叉树操作进行测试。(初始化,构造二叉树,图形显示,前序,中序,后序遍历结果,求结点个数,二叉树深度,叶子结点树,查找结点,找指定结点的左孩子,双亲,左兄弟,插入新的左、右孩子。注意:1.在编程过程中注意及

9、时保存编写内容。四、实验结果1.的代码2.的代码3.运行结果截图(可以有多张)1、#pragma once#include ”using namespace std;/ 二叉树类模板template class BinaryTreeprivate: / 二叉树的数据成员: BinTreeNode *root; / 二叉树的私有函数: void PreOrderHelp(BinTreeNode *r); / 先序遍历 void InOrderHelp(BinTreeNode *r); / 中序遍历 void PostOrderHelp(BinTreeNode *r);/ 后序遍历 void Cr

10、eat(BinTreeNode *r, int flag, ElemType empty, ElemType end); /递归创建子树 BinTreeNode *GetRoot(); /返回根指针 BinTreeNode *Locate(BinTreeNode *r, ElemType e); /查找元素值为e的结点,返回指针. BinTreeNode* LeftChild(ElemType e); /定位指定元素的左孩子,返回其指针。 BinTreeNode* Parent(BinTreeNode*r, ElemType e); /定位指定元素的父结点 BinTreeNode* LeftS

11、ibling(ElemType e); /定位指定元素的左兄弟 int Size(BinTreeNode *r); int Depth(BinTreeNode *r); int Leaf(BinTreeNode *r); /统计并返回叶子结点个数 void Clear(BinTreeNode *r); void DisplayTreeeHelp(BinTreeNode *r, int level); / 按树状形式显示以r为根的二叉树,level为层次数,可设根结点的层次数为1 int size;public: / 二叉树公共方法声明: BinaryTree(); / 无参数的构造函数模板 v

12、oid CreateBiTree();/ 构造二叉树 /BinTreeNode *GetRoot(); / 返回二叉树的根 void InOrder(); / 二叉树的中序遍历 void PreOrder(); / 二叉树的先序遍历 void PostOrder(); / 二叉树的后序遍历 void LevelOrder(); /按层遍历 int Locate(ElemType e); /查找元素值为e的结点。 int GetLeft(ElemType e, ElemType &c); /读取指定元素的左孩子 int GetParent(ElemType e, ElemType &f); /读

13、取指定元素的父元素 int GetLeftSibling(ElemType e, ElemType &s); /读取指定元素的左兄弟 int InsertChild(ElemType e, ElemType x, ElemType y); /为指定元素 e 插入左、右孩子 int SetElem(ElemType e, ElemType x); /更新指定元素 int Size(); int Depth(); int Leaf(); /统计并返回叶子结点个数 virtual BinaryTree();/ 销毁二叉树 void DisplayTree();template void Binary

14、Tree:PreOrderHelp( BinTreeNode *r) / private if (r != NULL) cout data leftChild); / 遍历左子树 PreOrderHelp(r-rightChild); / 遍历右子树 template void BinaryTree:PreOrder() / public PreOrderHelp(root);template void BinaryTree:InOrderHelp( BinTreeNode *r) / private if (r != NULL) InOrderHelp(r-leftChild); / 遍历左

15、子树 cout data rightChild); / 遍历右子树 template void BinaryTree:InOrder() / public InOrderHelp(root);template void BinaryTree:PostOrderHelp( BinTreeNode *r) / private if (r != NULL) PostOrderHelp(r-leftChild); / 遍历左子树 PostOrderHelp(r-rightChild); / 遍历右子树 cout data ; / 访问根结点 template void BinaryTree:PostO

16、rder() / public PostOrderHelp(root);template void BinaryTree:LevelOrder() LinkQueueBinTreeNode * q; BinTreeNode *t = root; if (t != NULL) (t); / 如果根非空,则入队 while (!() (t); cout data leftChild != NULL) / 左孩子非空 (t-leftChild); / 左孩子入队 if (t-rightChild != NULL) / 右孩子非空 (t-rightChild); / 右孩子入队 template Bi

17、naryTree:BinaryTree() root = NULL;template void BinaryTree:CreateBiTree() BinTreeNode* r; ElemType end, empty, x; cout 按先序序列的顺序输入一棵二叉树 endl; cout end; cout empty; cout 请开始输入: x; r = new BinTreeNode; r-data = x; r-leftChild = r-rightChild = NULL; root = r; Creat(r, 0, empty, end); /创建根结点的左子树 Creat(r,

18、 1, empty, end); /创建根结点的右子树template void BinaryTree:Creat(BinTreeNode *r,int flag, ElemType empty, ElemType end) BinTreeNode *p; ElemType x; cin x; if (x != end&x != empty) p = new BinTreeNode; p-data = x; p-leftChild = p-rightChild = NULL; if (flag = 0) r-leftChild = p; /p为左子树 else r-rightChild = p

19、; /p为右子树 size+; Creat(p, 0, empty, end); /递归创建左子树 Creat(p, 1, empty, end); /递归创建右子树 template BinTreeNode*BinaryTree:GetRoot() return root;template BinTreeNode*BinaryTree:Locate(BinTreeNode *r, ElemType e) /private if (r = NULL) return NULL; if (r-data = e) return r; BinTreeNode *p = Locate(r-leftChi

20、ld, e); if (p = NULL) p = Locate(r-rightChild, e); return p;template int BinaryTree:Locate(ElemType e) /public if (Locate(root, e) = NULL) return false; else return true;template BinTreeNode*BinaryTree:LeftChild(ElemType e) /private BinTreeNode* ep = Locate(root, e); if (ep = NULL) return NULL; /找不到

21、结点e if (ep-leftChild = NULL) /e无左孩子 return NULL; return ep-leftChild; /返回e左孩子的指针template int BinaryTree:GetLeft(ElemType e, ElemType &c) /Public BinTreeNode* p = LeftChild(e); if (p = NULL) return false; /e无左孩子 c = p-data; return true;template BinTreeNode* BinaryTree:Parent(BinTreeNode*r, ElemType e

22、) /private BinTreeNode* p; if (r = NULL)return NULL; if (r-leftChild != NULL&r-leftChild-data = e) | (r-rightChild != NULL&r-rightChild-data = e) return r; /r是e的父结点,返回结点r的指针 p = Parent(r-leftChild, e); /递归调用r的左子树 if (p = NULL) p = Parent(r-rightChild, e); return p;template int BinaryTree:GetParent(E

23、lemType e, ElemType &f) /public if (root = NULL | root-data = e) return false; BinTreeNode *p = Parent(root, e); if (p = NULL) return false; /树中无元素e f = p-data; return true;template BinTreeNode* BinaryTree:LeftSibling(ElemType e) /private if (root-data = e) return NULL; BinTreeNode *p = Parent(root,

24、 e); if (p = NULL)return NULL; /无e结点 if (p-leftChild-data = e) /e是其父亲的左孩子 return NULL; return p-leftChild; /返回e的左兄弟指针template int BinaryTree:GetLeftSibling(ElemType e, ElemType &s) if (root-data = e)return false; /根结点无兄弟 BinTreeNode *p = LeftSibling(e); if (p = NULL)return false; /e无左兄弟 s = p-data; return true;template int BinaryTree:InsertChild(ElemType e, ElemType x, ElemType y) BinTreeNode *ep, *xp, *yp; ep = Locate(root, e); /定位元素e if (ep = NULL) return false; /找不到元素e xp = new BinTreeNode; xp-data = x; xp-rightChild = NULL; yp = new BinTreeNode; yp-data

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1