ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:92.33KB ,
资源ID:11846787      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11846787.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(二叉树的遍历讲解.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

二叉树的遍历讲解.docx

1、二叉树的遍历讲解数 据 结 构 课 程 设 计设计题目: 基于文件实现二叉树的三种遍历 学生姓名: 汪碧霞 专业班级: 11算机科学与技术(2)班 指导教师: 汪红霞 完成时间: 2012-12 信息工程学院 计算机科学与技术 系课题名称基于文件实现二叉树的三种遍历院 系信息工程学院年级专业 11软件技术(2)班学 号姓 名成 绩课题设计目的与设计意义1、 课题设计目的:一了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;二 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;三 提高综合运用所学的理论知识和方法独立分析和解决问题的能力;四训练用系统的观点

2、和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风2、 课题设计意义:锻炼我们的编码能力,真正理解数据结构的编码思想,并且锻炼我们的动手能力和成员间的配合,提高程序编写能力。指导教师:汪红霞2012年 12月安徽新华学院课程设计成绩评定表(专科)1.设计目的数据结构作为一门学科主要研究数据的各种逻辑结构和存储结构,以及对数据的各种操作。因此,主要有三个方面的内容:数据的逻辑结构;数据的物理存储结构;对数据的操作(或算法)。通常,算法的设计取决于数据的逻辑结构,算法的实现取决于数据的物理存储结构。数据结构是信息的一种组织方式,其目的是为了提高算法的效率,它通常与一组算法

3、的集合相对应,通过这组算法集合可以对数据结构中的数据进行某种操作。在当今信息时代,信息技术己成为当代知识经济的核心技术。我们时刻都在和数据打交道。比如人们在外出工作时找最短路径,在银行查询存款、通过互联网查新闻、以及远程教育报名等,所有这些都在与数据发生关系。实际上,现实世界中的实体经过抽象以后,就可以成为计算机上所处理的数据。数据结构课程主要是研究非数值计算的程序设计问题中所出现的计算机操作对象以及它们之间的关系和操作的学科。数据结构是介于数学、计算机软件和计算机硬件之间的一门计算机专业的核心课程,它是计算机程序设计、数据库、操作系统、编译原理及人工智能等的重要基础,广泛的应用于信息学、系统

4、工程等各种领域。学习数据结构是为了将实际问题中所涉及的对象在计算机中表示出来并对它们进行处理。通过课程设计可以提高学生的思维能力,促进学生的综合应用能力和专业素质的提高。通过此次课程设计主要达到以下目的:1、了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;2、初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;3、提高综合运用所学的理论知识和方法独立分析和解决问题的能力;四训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风2.需求分析2.1课程设计的内容和要求(包括原始数据、技术要求、工作要求等)二叉树的遍历:

5、对任意给定的二叉树(顶点数自定)建立它的二叉链表存贮结构,并利用栈的五种基本运算(置空栈、进栈、出栈、取栈顶元素、判栈空)实现二叉树的先序、中序、后序三种遍历,输出三种遍历的结果。2.2选题的意义及背景二叉树的链式存储结构是用指针建立二叉树中结点之间的关系。二叉链存储结构的每个结点包含三个域,分别是数据域,左孩子指针域,右孩子指针域。因此每个结点为 由二叉树的定义知可把其遍历设计成递归算法。共有前序遍历、中序遍历、后序遍历。可先用这三种遍历输出二叉树的结点。采用递归算法设计,以前序遍历为例,它要求首先要访问根节点,然后前序遍历左子树和前序遍历右子树。特点在于所有未被访问的节点中,最后访问结点的

6、左子树的根结点将最先被访问,这与堆栈的特点相吻合。因此可借助堆栈实现二叉树的递归遍历。将输出结果与递归结果比较来检验正确性,因此程序结果可做成菜单方便这两种算法的结果查看。3.概要设计 3.1设计思想建立一个完全二叉树用堆栈实现的前序遍历:算法思想: (1).初始化一个堆栈 (2).把根节点的指针入栈 (3).当堆栈非空时执行循环步骤a 到步骤 c a. 出栈取得一个结点指针,访问该结点. b. 若该结点的右子树非空,将该结点的右子树指针入栈 c. 若该结点的左子树非空,将该结点的左子树指针入栈 用堆栈实现的中序遍历:算法思想: (1).初始化一个堆栈 (2).将根结点的所有左结点入栈 (3)

7、.当堆栈非空时执行循环步骤a 到步骤 d a. 出栈取得一个结点指针 b. 若该结点的右子树非空并且未被访问,将该结点的右子树指针入栈 c. 访问该结点 d. 若该结点的左子树非空并且未被访问,将该结点的左子树指针入栈 用堆栈实现的后序遍历 算法思想: (1).初始化一个堆栈 (2).将根结点的所有左结点入栈 (3)当堆栈非空时执行循环步骤a 到步骤 d a. 出栈取得一个结点指针 b. 若该结点的右子树非空并且未被访问,将该结点的右子树指针入栈 c. 若该结点的左子树非空并且未被访问,将该结点的左子树指针入栈 d. 访问该结点 例如:输入7节点的二叉树。它的前序遍历为:1 2 4 5 3 6

8、 7 它的中序遍历为:4 2 5 1 6 3 7 它的后序遍历为:4 5 2 6 7 3 1 12 3 4 5 6 7 3.2函数关系:图3.1 函数间的关系4.详细设计4.1二叉树算法源程序#include #define STACK_MAXLEN 30/using namespace std;typedef struct BTreeNodeint where;struct BTreeNode *rightChild;struct BTreeNode *leftChild;TYPE_B_TREE_NODE,*TYPE_pB_TREE_NODE;/堆栈的结构class TStackpublic

9、:void push(TYPE_pB_TREE_NODE pNode);/入栈TYPE_pB_TREE_NODE pop();/出栈int empty()if ( top = base )return 1;elsereturn 0;TStack()top=base=stackArray;for(int i=0; i STACK_MAXLEN; i+)stackArrayi=NULL;/cout堆栈初始化完毕!endl;private:TYPE_pB_TREE_NODE stackArraySTACK_MAXLEN;TYPE_pB_TREE_NODE *top;TYPE_pB_TREE_NODE

10、 *base;/指向指针的指针;void TStack:push(TYPE_pB_TREE_NODE pNode)*top=pNode;top+;TYPE_pB_TREE_NODE TStack:pop()TYPE_pB_TREE_NODE returnValue;top-;returnValue=(*top);*top=NULL;return returnValue;/建立一个简单的完全二叉树TYPE_pB_TREE_NODE CreateBTree()int i=0;int NodeNum;TYPE_pB_TREE_NODE pBTreeArray,pBTree;cout请输入完全二叉树的

11、节点数:NodeNum;pBTreeArray=new TYPE_B_TREE_NODENodeNum;for(i=1; i = NodeNum/2-1; i+)pBTreeArrayi-1.where=i;pBTreeArrayi-1.leftChild=pBTreeArray+(2*i-1);pBTreeArray2*i-1.where=2*i;pBTreeArrayi-1.rightChild=pBTreeArray+(2*i);pBTreeArray2*i.where=2*i+1;if(2*i+1 = NodeNum )pBTreeArrayi-1.where=i;pBTreeArra

12、yi-1.leftChild=pBTreeArray+(2*i-1);pBTreeArray2*i-1.where=2*i;pBTreeArrayi-1.rightChild=pBTreeArray+(2*i);pBTreeArray2*i.where=2*i+1;elsepBTreeArrayi-1.where=i;pBTreeArrayi-1.leftChild=pBTreeArray+(2*i-1);pBTreeArray2*i-1.where=2*i;pBTreeArray2*i.rightChild=NULL;for( int j=i+1; j =NodeNum; j+ )pBTre

13、eArrayj-1.leftChild=NULL;pBTreeArrayj-1.rightChild=NULL;return pBTree=pBTreeArray+0;/void PrintBTree(TYPE_pB_TREE_NODE pBTreeRoot)if( pBTreeRoot != NULL )coutwhereleftChild);PrintBTree(pBTreeRoot-rightChild);/先序遍历void PreOrder(TYPE_pB_TREE_NODE pBTreeRoot)cout先序遍历endl;TStack stack;TYPE_pB_TREE_NODE

14、pTemporary;pTemporary=pBTreeRoot;while( pTemporary != NULL )coutwhereleftChild;while( stack.empty() != 1 )pTemporary=stack.pop();if( pTemporary-rightChild = NULL )continue;elsepTemporary=pTemporary-rightChild;while( pTemporary != NULL )coutwhereleftChild;/中序遍历void InOrder(TYPE_pB_TREE_NODE pBTreeRoo

15、t)cout中序遍历endl;TStack stack;TYPE_pB_TREE_NODE pTemporary;pTemporary=pBTreeRoot;while( pTemporary != NULL )/coutwhereleftChild;while( stack.empty() != 1 )pTemporary=stack.pop();coutwhererightChild = NULL )continue;elsepTemporary=pTemporary-rightChild;while( pTemporary != NULL )/stack.push(pTemporary)

16、;pTemporary=pTemporary-leftChild;/后序遍历void PostOrder(TYPE_pB_TREE_NODE pBTreeRoot)cout后序遍历endl;TStack stack;TYPE_pB_TREE_NODE pTemporary;int * pFlag;/ int withNoChild;int flagSTACK_MAXLEN;for(int i=0; i STACK_MAXLEN ; i+)flagi=0;pFlag=flag;stack.push(pBTreeRoot);while( stack.empty() != 1 )pTemporary

17、=stack.pop();if( *pFlag = 1 )coutwhererightChild !=NULL )stack.push(pTemporary-rightChild);pFlag+;/ withNoChild+;if( pTemporary-leftChild !=NULL )stack.push(pTemporary-leftChild);pFlag+;/withNoChild+;void main()TYPE_pB_TREE_NODE pBTreeRoot;pBTreeRoot=CreateBTree();/ PrintBTree(pBTreeRoot);PreOrder(p

18、BTreeRoot);InOrder(pBTreeRoot);PostOrder(pBTreeRoot); 4.2 程序结果截图输入节点数为7的二叉树:输入节点为5的二叉树:输入节点为3的二叉树:5. 程序测试结果及问题分析 通过与递归的遍历结果相比较之后,用堆栈实现的非递归遍历算法得出了正确的遍历结果,可以对二叉树进行遍历操作。但是程序中树的结点已经建立好不能随意改动这确实是一个缺点因此可以进行改进,可以用递归的方法建立一棵二叉树,先建立左子树,在建立右子树这样用户输入的字符可以直接用来建树程序的灵活性会更强。6.总结 通过一周的数据结构实训,进一步加深了对数据结构整体的理解,明白了链表的各

19、种操作的实质,并且对老师课上讲的各种算法进行了实际的运用,更加掌握了各种算法的使用方法,例如链表的创建,查找,插入,二叉树的遍历等算法。 而且,通过这一次的实训,不仅加深了对数据结构知识的了解,更复习了以前学习过的C语言,重新复习了栈等经典算法,而且对于以前不懂得地方,例如主函数与子函数之间的实参,形参之间的传递,并且在二叉树的遍历部分复习了递归算法的使用。这一周的实训,我深刻的领悟到,遇到困难,一定不要畏惧,自己多动脑思考思考,所联系自己以前学过的知识,便会有很大的进展,还有就是,往往一些错误都不是编写的逻辑错误,而是一些小错误点,例如忘记另外一部分的大括号,忘记分号等等,这提醒自己以后要细

20、心,不要错在一些小问题上。 在这次课程设计中在,虽然不会成功的编写一个完整的程序,但是在看程序的过程中,不断的上网查资料以及翻阅相关书籍,通过不断的模索,测试,发现问题,解决问题和在老师的帮助下一步一步慢慢的正确运行程序决问题,终于完成了这次课程设计,虽然这次课程设计结束了但是总觉得自已懂得的知识很是不足,学无止境,以后还会更加的努力深入的学习。7.参考文献1严蔚敏,吴伟民数据结构(C语言版),北京:清华大学出版社,2009.2顾泽元,刘文强,数据结构(C语言版),北京:北京航空航天大学出版社,20113徐德民.最新C语言程序设计M电子工业出版社1992年4唐策善,黄刘生.数据结构M中国科学技术出版社.1992年5仲萃豪,冯玉琳.程序设计方法学M北京科学技术出版社1985年6 宁正元,王秀丽,算法与数据结构 清华大学出版社,2006 7 潭浩强, 数据结构教程上级实验指导 清华大学出版社,2008. 8 朱站立,数据结构-使用C语言西安:西安交通大学出版社,2004.8.附录:源程序

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1