- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
建立二叉树,并对树进行操作数据结构课程设
课题名:建立二叉树,并对树进行操作
系别:信息与计算科学系
年级:2009级
专业:数学与应用数学
班级:一班
学号:2009031116、2009031112、2009123123、2009031102、2009031110
姓名:唐永桥、杨文升、李兵、陈丕权、范庆勇
指导老师:李学勇
2011-5-10
目录
摘 要 3
1、引言 5
1.1设计目标 5
1.2 相关知识 5
2、总体设计 10
2.1主要数据存储结构设计 10
2.2模块的划分及其功能 10
3、详细设计 11
3.1存储结构的建立由scanf()函数实现 11
3.2重要函数 12
3.3程序相关分析 12
3.4结构体和全局变量定义 12
3.5程序清单 13
4、测试数据及结果分析 19
5、总结 21
6、参考文献 22
[1]《数据结构》(C语言版),严蔚敏,清华大学出版社,2003. 22
运行环境、开发工具
运行环境:VC++ 6.0
开发工具:电脑
2、需求分析
2.1设计目标
二叉树是形象的说既树中每个节点最多只有两个分支,它是一个重要的数据类型。可以运用于建立家谱,公司所有的员工的职位图,以及各种事物的分类和各种机构的职位图表。
二叉树是通过建立一个链式存储结构,达到能够实现前序遍历,中序遍历,后序遍历。以及能够从输入的数据中得知二叉树的叶子节点的个数,二叉树的深度。在此,二叉树的每一个结点中必须包括:值域,左指针域,右指针域。
2.2 相关知识
1、 status CreateBiTree(BiTree *T)
{// 先序创建二叉树
TelemType ch;
scanf(%c,ch);
if(ch==ENDFLAG) *T=NULL;
else {
if(!(*T=(BiTNode *)malloc(sizeof(BiTNode))))
{
printf(\nOut of space.);
getch();
exit(0);
}
(*T)-data=ch; //生成根结点
CreateBiTree(((*T)-lchild));//左子树
CreateBiTree(((*T)-rchild));//右子树
}
return OK;
}
TelemType的作用是输入n各任意的字符,而且在输入n个字符后,必须输入N=1
个0,才能够得到本程序所有能够实现的功能。T=Null是将二叉树置为空。
if(!(*T=(BiTNode *)malloc(sizeof(BiTNode))))//采用动态申请结点的方式,不仅实现起来方便,而且还节省大量的存储空间。
(*T)-data=ch; //生成根结点
CreateBiTree(((*T)-lchild));//左子树
CreateBiTree(((*T)-rchild));//右子树
2、前序遍历:先访问根结点,再访问左子树,最后访问右子树。
具体实现如下:
status PreOrderTraverse(BiTree T)
{
if(T)
{
printf(%c,T-data);
PreOrderTraverse(T-lchild);
PreOrderTraverse(T-rchild);
}
return OK;
}
3、求叶子结点的个数:用m变量表示叶子结点的总个数。
当树为空是此时讨论叶子结点个数无意义;
当树非空时分为:一、左右子树都不存在时,m自加1,m的值就为1,即叶子结点的个数为1;
二、左右子树存在,就用分别访问出左右子树中叶子结点的个数,两者相加就为二叉树叶子结点的个数。
具体实现如下:
//求二叉树的叶结点个数
status NumberLeaves(BiTree T)
{//先序遍历得到叶结点的数目
//m=0;
if(T)
{
if(T-lchild==NULLT-rchild==NULL) m++;
NumberLeaves(T-lchild);
NumberLeaves(T-rchild);
}
return OK;
}
4、中序遍历:先访问左子树,再访问根结点,最后访问右子树。
具体实现如下:
status InOrderTraverse(BiTree T)
{
if(T)
{
InOrderTraverse(T-lchild);
printf(%c,T-data);
InOrderTraverse(T-rchild);
}
您可能关注的文档
最近下载
- 如何寻找鱼道,如何寻找钓点.ppt
- 医院中药饮片采购项目方案投标文件(技术方案).pdf
- 3.1 捐书(课件)2025-2026学年度北师大版数学三年级上册.pptx VIP
- 2020-2021学年苏教版数学二年级上册第四单元《 表内除法(一)》解决问题专项练习卷C.pdf VIP
- 人教版道德与法治三年级上册第5课《走近科学家》课件.pptx VIP
- 《儿童发展心理学》课件_7第六章 儿童语言的发展.ppt VIP
- 中秋博饼规则.doc VIP
- 药用单宁酸的制备.docx VIP
- 压力管道年度检查报告(空白).pdf VIP
- 2021届高考物理一轮复习_电磁学库仑力与力学综合类问题专题练习.docx VIP
文档评论(0)