建立二叉树,并对树进行操作数据结构课程设.docVIP

建立二叉树,并对树进行操作数据结构课程设.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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); }

文档评论(0)

youshen + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档