- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《数据结构》课程设计报告er cha shu
泰州学院课程设计报告书课程名称:《数据结构》设计题目:二叉树的遍历指导教师:潘海玉难度级别:★★★班级: 15计科(2班)学号: 150342218 姓名:张政得分:需求分析树结构在客观世界中广泛存在,如人类社会的族谱和各种社会组织机构都可用树形象表示。树在计算机领域中也得到广泛应用,如在编译源程序时,可用树表示源程序的语法结构。又如在数据库系统中,树型结构也是信息的重要组织形式之一。一切具有层次关系的问题都可用树来描述。树结构的特点是:它的每一个结点都可以有不止一个直接后继,除根结点外的所有结点都有且只有一个直接前驱。以下具体地给出树的定义及树的数据结构表示二叉树是一种很有用的非线性结构,它具有以下两个特点:1)非空二叉树只有一个根结点;2)每一个结点最多有两棵子树,且分别称为该结点的左子树与右子树。*:根据二叉树的概念可知,二叉树的度可以为0(叶结点)、1(只有一棵子树)或2(有2棵子树)。二叉树也是递归定义的,其结点有左右子树之分,逻辑上二叉树有五种基本形态:(1)空二叉树——(a);(2)只有一个根结点的二叉树——(b);(3)只有左子树——(c);(4)只有右子树——(d);(5)完全二叉树——(e)注意:尽管二叉树与树有许多相似之处,但二叉树不是树的特殊情形。重要概念(1)完全二叉树——若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h层有叶子结点,并且叶子结点都是从左到右依次排布,这就是完全二叉树。(2)满二叉树——除了叶结点外每一个结点都有左右子叶且叶子结点都处在最底层的二叉树。(3)深度——二叉树的层数,就是深度。性质(1) 在二叉树中,第i层的结点总数不超过2^(i-1);(2) 深度为h的二叉树最多有2^h-1个结点(h=1),最少有h个结点;(3) 对于任意一棵二叉树,如果其叶结点数为N0,而度数为2的结点总数为N2,则N0=N2+1;(4) 具有n个结点的完全二叉树的深度为int(log2n)+1(5)有N个结点的完全二叉树各结点如果用顺序方式存储,则结点之间有如下关系:若I为结点编号则如果I1,则其父结点的编号为I/2;如果2*I=N,则其左儿子(即左子树的根结点)的编号为2*I;若2*IN,则无左儿子;如果2*I+1=N,则其右儿子的结点编号为2*I+1;若2*I+1N,则无右儿子。(6)给定N个节点,能构成h(N)种不同的二叉树。h(N)为卡特兰数的第N项二:二叉树的建立二叉树是采用递归定义的,实现起来代码简洁(也许并不简单)。并且它在具体的计算机科学中有很重要的运用,是一种很重要的数据结构,二叉树有三种遍历和建立的方式。今天先学习一下它的建立和打印。二叉树的遍历先序遍历先序就是先遍历根,再遍历左子树,再遍历右子树。例如上图的先序遍历是:ABCDEFGHK中序遍历中序就是先遍历左子树,再遍历根,再右子树。例如上图的中序遍历是:BDCAEHGKF后序遍历后序就是先遍历左子树,再右子树,再根。例如上图的后序遍历是:DCBHKGFEA层次遍历层次就是一行一行的遍历从上向下,例如上图的层次遍历是:abecfdghk三:详细设计二叉树的创建typedef struct BiTNode{char data;struct BiTNode *lchild,*rchild;}BiTNode,*BiTree;//定义结点类型BiTree CreateBiTree()//创建树{char p;BiTree T;scanf(%c,p);if(p== )T=NULL;else{T=(BiTNode *)malloc(sizeof(BiTNode));//为结点开辟空间T-data=p;T-lchild=CreateBiTree();T-rchild=CreateBiTree();}return (T);先序遍历typedef struct BiTNode{char data;struct BiTNode *lchild,*rchild;}BiTNode,*BiTree;//定义结点类型BiTree CreateBiTree()//创建树{char p;BiTree T;scanf(%c,p);if(p== )T=NULL;else{T=(BiTNode *)malloc(sizeof(BiTNode));//为结点开辟空间T-data=p;T-lchild=CreateBiTree();T-rchild=CreateBiTree();}return (T);}}中序遍历void InOrder(BiTree T)//中序{if(T!=NULL){InOrder(T-lchild);printf(%c,T-data);InOrder(T-rchild);}}后
文档评论(0)