- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构用c语言描述实验五
实验五
实验名称 二叉树及其应用 实验性质 设计性 实验学时数 6学时
一、实验目的
1.掌握二叉树链表的结构和构造过程。
2.掌握用递归方法实现二叉树的遍历。
3.加强对二叉树的理解,培养解决实际问题的能力。 二、实验内容
1. 用递归方法实现对二叉树的遍历等操作。
2. 二叉树的其他操作算法。 三、
实
验
过
程
1、实验题目
[问题描述]
以下题目根据自己兴趣和能力可选作二道作为实验题目:
(1)创建一颗二叉树,用递归方法实现对其进行先序、中序和后序遍历的操作;
(2)根据题目1,修改其中一个算法,用来计算统计二叉树中叶子节点的个数和度为1、度为2的节点个数;
(3)设计并实现一个哈夫曼树并对其进行编码。
(4)修理牧场。农夫要修理牧场的一段栅栏,发现需要N块木头,每块木头长度为整数Li个长度单位,于是他购买了一条很长的、能锯成N块的木头,即该木头的长度是Li的总和。但是农夫自己没有锯子,请人锯木的酬金跟这段木头的长度成正比。简单起见,设酬金等于所锯木头的长度。例如,将长度为20的木头锯成长度为8、7和5的三段,第一次锯木头将木头锯成12和8,花费20;第二次将木头长度为12的木头锯成7和5花费12,总花费为32.如果第一次将木头锯成15和5 ,则第二次锯木头花费15,总花费35(大于32)。请编写程序帮助农夫计算将木头锯成N块的最少花费。输入数据N表示要将木头锯成N块,然后输入N个整数,表示每段木块的长度。输出将木头锯成N块的最少花费。(可采用哈夫曼算法和最小堆实现)
[基本要求]
(1)按实验内容编写完整的程序,并上机验证。
(2)实验完成后,提交电子档教师验收程序,并提交填写好的实验报告。
[测试数据]
由学生依据软件工程的测试技术自己确定。注意测试边界数据。
2、源程序
#includestdio.h
#includemalloc.h
#define DataType char
#define Visit char
typedef struct Node //定义二叉链表节点结构
{
DataType data;
struct Node *LChild;
struct Node *RChild;
}BiTNode,*BiTree;
void inist(BiTree *root) //初始化二叉链表
{
(*root)=(BiTree)malloc(sizeof(BiTNode));
(*root)-LChild=NULL;
(*root)-RChild=NULL;
}
void CreateBiTree(BiTree *bt) //创建二叉链表
{
char ch;
ch=getchar();
if(ch==‘;’) *bt=NULL;
else
{
*bt=(BiTree)malloc(sizeof(BiTNode));
(*bt)-data=ch;
CreateBiTree(((*bt)-LChild));
CreateBiTree(((*bt)-RChild));
}
}
void PreOrder(BiTree root)
/*先序遍历二叉树,root为指向二叉树根节点的指针*/
{if(root!=NULL)
{
Visit(root-data);
printf(%c\n,root-data);
PreOrder(root-LChild);
PreOrder(root-RChild);
}
}
void InOrder(BiTree root)
/*中序遍历二叉树,root为指向二叉树根节点的指针*/
{if(root!=NULL)
{
InOrder(root-LChild);
Visit(root-data);
printf(%c\n,root-data);
InOrder(root-RChild);
}
}
void PostOrder(BiTree root)
/*后序遍历二叉树,root为指向二叉树根节点的指针*/
{if(root!=NULL)
{
PostOrder(root-LChild);
PostOrder(root-RChild);
Visit(root-data);
printf(%c\n,root-data);
}
}
int main() //主函数
{
int choice;
BiTree bt;
inist(bt);
bt=(BiTree)malloc(sizeof(BiTNode));
printf(请输入字符以‘ ; ’结束:);
Cr
原创力文档


文档评论(0)