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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

实验报告2二叉树及哈夫曼编码Word下载.docx

1、(3)理解哈夫曼树的构造算法,学习设计哈夫曼编码和译码系统。二、实验环境(实验设备) 硬件: 微型计算机 软件: Microsoft Visual C+6.0三、实验原理及内容 实验题一:在二叉链表上实现二叉树运算(1)设计递归算法,实现下列二叉树运算:删除一棵二叉树、求一棵二叉树的高度、求一棵二叉树中叶子结点数、复制一棵二叉树、交换一棵二叉树的左右子树。(2)设计算法,按自上到下,从左到右的顺序,按层次遍历一棵二叉树。(3)设计main函数,测试上述每个运算。内容:1、建立头文件BTree.H,在该文件中定义二叉树的链式存储结构,并编写二叉树的各种基本操作实现函数。同时建立一个验证操作实现的

2、主函数文件Test.cpp,编译并调试程序,直到正确运行。注意:需要用到队列的有关操作。说明:二叉树的基本操作可包括:(1)void Clear(BTreeNode *BT) 清除一棵二叉树,并释放结点空间(2)void MakeTree(BTreeNode *BT) 构造一棵二叉树BT(3)void BreakTree(BTreeNode *BT) 撤销一棵二叉树BT(4)void PreOrder (BTreeNode *BT) 先序遍历二叉树BT(5)void InOrder(BTreeNode *BT) 中序遍历二叉树BT(6)void PostOrder(BTreeNode *BT)

3、 后序遍历二叉树BT (7) void FloorOrder(BTreeNode *BT) 层次遍历二叉树BT (8)int Size(BTreeNode *BT) 求二叉树BT的结点数量(9)void Exchange(BTreeNode *BT) 把二叉树BT的左右子树进行交换(10)int GetHeight(BTreeNode *BT) 求二叉树BT的高度(一)概要设计1.流程图及设计思想2.本程序包含的模块(1)主程序模块 Void main() 初始化; 构造一棵二叉树; 各种遍历二叉树; 对二叉树进行各种常见运算; 删除二叉树; (2) 二叉树模块实现二叉树的抽象数据类型和基本操

4、作(3) 队列模块实现队列的抽象数据类(4)二叉树运算模块求二叉树的结点,叶子数目(二)详细设计 一先序遍历:A自然语言描述:1.判断根节点会否为空,如果为空,返回2.如果根节点不为空3.先输出根节点,再递归调用自身依次输出左孩子和右孩子B代码详细分析template void BinaryTree:PreOrder(void (*Visit)(T& x) PreOrder(Visit,root);template x),BTNodeelement); PreOrder(Visit,t-lChild); PreOrder(Visit,t-rChild);二中序遍历:1.判断根节点是否为空,如果

5、为空,返回3. 递归调用自身输出左孩子,再输出根结点,递归调用输出右孩子B代码详细分析:InOrder(void (*Visit)(T& InOrder(Visit,root); InOrder(Visit,t-lChild);三后序遍历:A自然语言描述:3. 递归调用自身输出左孩子和右孩子,再输出根结点PostOrder(void (*Visit)(T& PostOrder(Visit,root); PostOrder(Visit,t-Visit(t-四层次遍历二叉树:1定义头指针和尾指针和空指针p2.根节点是否为空,如果是,结束3.如果不是,根节点入队4. 取队首元素,输出队首元素5.将队

6、首的非空左右结点入队列,删除队首元素6.循环下去,直到队列为空FloorOrder(void (*Visit)(T &x) FloorOrder(Visit,root);FloorOrder(void(*Visit)(Visit*x),BTNode*t) SeqQueueBTNodese(100); se.EnQueue(t); BTNodelchild) se.EnQueue(temp-lchild);child)rchild);五求二叉树的结点数:A. 自然语言描述:1:判断根节点是否为空,如果为空,返回02:如果根节点不为空 3:递归调用求二叉树的结点数的函数,参数改为根节点的左孩子 4

7、:递归调用求二叉树的结点数的函数,参数改为根节点的右孩子5:返回根节点的左右字数的结点数之和B代码详细分析:int BinaryTreeSize() return Size(root);Size(BTNodelChild)+Size(t-rChild)+1;六二叉树的左右交换:2.如果不为空,再判断该节点左右孩子是否同时为空,3.如果是,返回4.如果不为空,交换左右孩子5.返回循环,遍历左右子树Exchange() Exchange(root);Exchange(BTNodelChild; t-lChild=t-rChild;rChild=temp; Exchange(t-七求二叉树的深度:判

8、断根节点是否为空,如果根节点为空,返回0 如果根节点不为空但是根节点的左右孩子同时为空,返回1 如果以上两个条件都不成立递归调用求二叉树的深度,函数的参数改为根节点的左孩子,并且深度初始化为1递归调用求二叉树的深度,函数的参数改为跟结点的右孩子,并且深度初始化为0 6:返回4与5步中得出深度较大的那个数作为二叉树的深度数B 代码详细分析:GetHeight(BTNode tempr=GetHeight(t- if(templ+tempr+) return templ; return tempr;测试结果二叉树基本运算源代码:BTree.using namespace std;struct BT

9、Node T element; *lChild,*rChild; BTNode() lChild=rChild=NULL;BTNode(const T& x) element=x; BTNode(const T& x,BTNode *l,BTNode *r) lChild=l; rChild=r;class BinaryTreepublic: BinaryTree()root=NULL; BinaryTree()Clear(root); bool IsEmpty()const; void Clear(); bool Root(T &x)const; int Size(); void MakeT

10、ree(const T &e,BinaryTree& left,BinaryTree right); void BreakTree(T & void LevelOrder(void (*Visit(T& x); void PreOrder(void (*Visit)(T& x); void InOrder(void (*Visit)(T& void PostOrder(void (*Visit)(T&void Exchange(); int GetHeight();protected:* root;private: void Clear(BTNode* t); int Size(BTNode

11、void LevelOrder(void (*Visit)(T& void Exchange(BTNode int GetHeight(BTNodeClear(BTNode delete t;bool BinaryTreeelement; return true; return false;MakeTree(const T & right) if(root|&left=&right) root=new BTNode(e,left.root,right.root);left.root=right.root=NULL;BreakTree(T &x,BinaryTree left.root=root

12、- right.root=root- delete root; root=NULL;void Visit(T& coutx emplateFloorOrder(void(*Visit)(T& SeqQueuelChild) se.EnQueue(tmp-GetHeight() return GetHeight(root);emplate Test.Cpp:#include BTree.() BinaryTree a,b,x,y,z; y.MakeTree(E,a,b); z.MakeTree(F x.MakeTree(C,y,z);DB,y,x);前序遍历endl; z.PreOrder(Vi

13、sit);中序遍历 z.InOrder(Visit);后序遍历z.PostOrder(Visit);层次遍历 z.LevelOrder(Visit);cout结点数量:z.Size() z.Exchange();左右交换后的前序遍历z.PreOrder(Visit);树的高度:z.GetHeight() return 0;实验题二:哈夫曼编码和译码系统(1)所设计的系统重复显示以下菜单项:B建树:读入字符集和各字符频度,建立哈夫曼树。T遍历:先序和中序遍历二叉树。E生成编码:根据已建成的哈夫曼树,产生各字符的哈夫曼编码。C编码:输入由字符集中字符组成的任意字符串,利用已生成的哈夫曼编码进行编码

14、,显示编码结果,并将输入的字符串及其编码结果分别保存在磁盘文件textfile.txt和codefile.txt中。D译码:读入codefile.txt,利用已建成的哈夫曼树进行译码,并将译码结果存入磁盘文件result.txt中。P打印:屏幕显示文件textfile.txt、codefile.txt和result.txt。X退出。源代码#include cstdlibqueuestringint *weightArray;string s;string *codeArray;struct BTNode *lChild, *rChild; BTNode() lChild = rChild = NULL; x) element = x;

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

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