数据结构_二叉树遍历实现分解.docxVIP

  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文档。上传文档
查看更多
数据结构实验课程名称数据结构实验题目名称二叉树的遍历实现学生学院应用数学学院专业班级信息计算1 班 学 号3114008104学生姓名 陈辉腾 指导教师刘志煌2016年6月3日二叉树遍历实现14信计1班—陈辉腾—3114008104实验目的:实现二叉树的基本遍历(先序,中序和后序),通过本实验可以加深对二叉树、对递归、对堆栈,对指针的了解,以及对算法的比较和代码规范化的学习。(详细思路写在程序注释里面)首先先序构造一颗树:代码实现及思路如下:构造如下一棵树,代码运行结果如下:构造的树:构造了一颗二叉树,然后就对其进行各种遍历操作。先对其递归遍历实现:中序和后序和先序是同样的道理:运行结果如下:接着对其非递归递归遍历实现:非递归遍历要用到栈,自己有写栈的各种操作。另外,我发现可以用C++库里面人家写好的,include进来就可以直接调用,以下代码有些是用自己写的栈,有些是用C++库里面的(感觉别人写的很好用,比如调试的时候查看栈内元素就比自己写的简单明了)。思路都写在代码的注释里面面,个人觉得这样好看些,截图放入word文档就省去排版了,更方便理解。先序非递归:先序非递归运行结果:中序非递归1:(中序非递归写了两种算法,都是实现书本上的。)中序非递归1运行结果:中序非递归2:中序非递归2运行结果:后序非递归也写了两种算法,一种是用标识访问次数来确定右子树是否被访问的,访问次数标识变量定义结构体里面。另一种就是经典的双栈法。后序非递归1:后序非递归1运行结果:后序非递归2(双栈):后序非递归2(双栈)运行结果:总结:二叉树的本质是递归定义的二叉链表,对树的操作往往离不开递归,递归形式上看起来简单明了,调用起来却是层层嵌套,而且递归调用要保存很多信息,这些信息也应该是用栈来保存的,另外,递归调用会占用较多的CPU资源,效率不高。于是,我们考虑使用非递归的形式来对树进行操作,而非递归的算法却不太好理解,可能对于我来说不确定的因素太多了吧,要自己想还真想不出来。一开始,算法也看不太懂,特别是后序非递归比较难,本身对c语言,对指针就不是特别理解,于是只能跟着程序来调试,并参考别人写的,慢慢的才理解。个人觉得后序非递归算法用双栈法比较高大上,因为不仅充分运用数据结构的栈,还能和先序非递归进行对比,简直是经典算法。另外,做实验的时候也遇到了许多困难,感觉对指针怕怕的,还好后来经过同学间的讨论,以及丰富的网上资源把困难摆平了。而看非递归算法也是有一种好像自己所有精力都会耗尽在里面,而自己对算法本质的理解还是不透彻的感觉。总的来说,做完这个实验,也感觉自己在算法方面,编码方面有一定的收获。附录:(代码)头文件:#includestdlib.h#define TRUE 1#define FALSE 0#define OK 1#define ERROR -1#define OVERFLOW -2#define STACK_INIT_SIZE 100#define STACK_INCREMENT 10typedefint Status;typedef char ElemType;typedefstructBiTNode{ElemType data;structBiTNode *lchild,*rchild;//左右孩子指针intvisitCount; //访问次数(后序遍历会用到)}BiTNode,*BiTree;typedefstruct{BiTNode *base;BiTNode *top;intstacksize;}SqStack;Status visit(ElemTypeelem){printf(%c,elem);return OK;}Status InitStack(SqStack S){S.base = (BiTNode *)malloc(STACK_INIT_SIZE * sizeof(BiTNode));if(!S.base)exit(OVERFLOW);S.top = S.base;S.stacksize = STACK_INIT_SIZE;return OK;}Status Push(SqStack S,BiTNode *p){if(S.top - S.base = STACK_INIT_SIZE){S.base = (BiTNode *)realloc(S.base,(S.stacksize + STACK_INCREMENT) * sizeof(BiTNode));if(!S.base)exit(OVERFLOW);S.top = S.base + S.stacksize;S.stacksize += STACK_INCREMENT;}*S.top = *p;S.top=S.t

文档评论(0)

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

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

1亿VIP精品文档

相关文档