- 1、本文档共38页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构实验二汇编
实 验 报 告
课程名称 数据结构 A 实验名称 二叉树的基本操作及哈夫曼编码译码系统的实现 实 验 报 告
实验名称 二叉树的基本操作及哈夫曼编码译码系统的实现 指导教师 实验类型 验证 实验学时 2+2 实验时间 实验目的和要求
目的:
要求:
计算机,Windows 7系统
IDE: Codeblocks 16.01
编译器: GNU GCC Compiler 三、实验原理及内容
程序一:二叉树的以及基本运算包含两个类,一个是类,定义了数据,分别是该结点元素数和左右的指针,定义了三个的构造函数tree类ode的友元,Visit函数ode的友元函数。类是tree 二叉树类,一个数据成员(根节点的指针root)一组运算,先序中序,,层次遍历二叉树,拆分二叉树,判断空,数释放二叉树。
:
的创建
一个二叉树新申请一个结点,子树分别指向的两个二叉树结点元素赋值为参数值先判断左右子树是不是同一个树以及当前调用是不是一个空二叉树。要引用参数中root指针赋值为NULL,指针同一个空间造成混乱。
:
template class T
void BTreeT::MakeTree(const T e, BTreeT left, BTreeT right)
{
if(root||left==right) return;
root=new BTNodeT(e,left.root,right.root);
left.root=right.root=NULL;
couthere in BTreeT::MakeTreeendl;
}
的拆分
一个二叉树拆分成两个二叉树,首先判断中是不是空,同一个二叉树,当前对象二叉树是不是空然后将引用的root指针赋值为当前对象的左右子树最后对象root指向的结点,并将root赋值为NULL,防止指针指向的共享。
:
template class T
void BTreeT::BreakTree(T e,BTreeTleft, BTreeT right)
{
couthere in BTreeT::BreakTree.endl;
if(left.root||right.root||!root||left==right) return ;
e=root-element;
left.root=root-lchild;
right.root=root-rchild;
delete root;
root=NULL;
}
二叉树的遍历
的遍历有两个函数,分别是面向用户的PreOrder(void (*Visit)(BTNodeT* u))和私有PreOrder(void (*Visit)(BTNodeT*u), BTNodeT*t)。前者调用后者递归,完成遍历。中。先访问当前的element域,在分别PreOrder递归访问左右子树,当前指针t为空,则递归边界返回。和后序遍历只在element出现的位置有区别,其他一样。
遍历代码:
template class T
void BTreeT::PreOrder(void (*Visit)(BTNodeT* u),BTNodeT* t)
{
if(t)
{
Visit(t);
PreOrder(Visit,t-lchild);
PreOrder(Visit,t-rchild);
}
}
遍历代码:
template class T
void BTreeT::InOrder (void (*Visit)(BTNodeT* u),BTNodeT* t)
{
if (t)
{
InOrder(Visit,t-lchild);
Visit(t);
InOrder(Visit,t-rchild);
}
}
代码:
template class T
void BTreeT::PostOrder(void (*Visit)(BTNodeT* u),BTNodeT* t)
{
if (t)
{
PostOrder(Visit,t-lchild);
PostOrder(Visit,t-rchild);
Visit(t);
}
}
分析:
数n个,如果不考虑系统栈的消耗,,每个结点最多,复杂度是O()
二叉树的层次遍历
二叉树的层次遍历,定义一个临时的队列中元素是指向结点的指针,将根节点入队列,
代码:
template class T
void BTreeT::CenOrder(void (*Visit)(BTNodeT* u),BTNodeT* t)
{
if
文档评论(0)