二叉树的遍历.doc
《二叉树的遍历.doc》由会员分享,可在线阅读,更多相关《二叉树的遍历.doc(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数 据 结 构 课 程 设 计设计题目: 基于文件实现二叉树的三种遍历 学生姓名: 郎金鑫 专业班级: 10计算机科学与技术(1)班 指导教师: 姚丽莎 完成时间: 2012-6-2 信息工程学院院计算机科学院与技术系课题名称基于文件实现二叉树的三种遍历院 系信息工程学院年级专业10计科(1)班学 号姓 名成 绩1042151116郎金鑫课题设计目的与设计意义1、 课题设计目的:一了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;二 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;三 提高综合运用所学的理论知识和方法独立分析和解决问题的能力;四训练用系
2、统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风2、 课题设计意义:锻炼我们的编码能力,真正理解数据结构的编码思想,并且锻炼我们的动手能力和成员间的配合,提高程序编写能力。指导教师:姚丽莎2012年 06月02日目录1.设计目的42.需求分析52.1课程设计的内容和要求52.2选题背景53.概要设计63.1设计思想63.2函数间的关系84.详细设计84.1二叉树算法源程序84.2程序截图和结果185. 程序测试结果及问题分析196.总结197.参考文献208.附录201.设计目的数据结构作为一门学科主要研究数据的各种逻辑结构和存储结构,以及对数据的各种操作。
3、因此,主要有三个方面的内容:数据的逻辑结构;数据的物理存储结构;对数据的操作(或算法)。通常,算法的设计取决于数据的逻辑结构,算法的实现取决于数据的物理存储结构。数据结构是信息的一种组织方式,其目的是为了提高算法的效率,它通常与一组算法的集合相对应,通过这组算法集合可以对数据结构中的数据进行某种操作。在当今信息时代,信息技术己成为当代知识经济的核心技术。我们时刻都在和数据打交道。比如人们在外出工作时找最短路径,在银行查询存款、通过互联网查新闻、以及远程教育报名等,所有这些都在与数据发生关系。实际上,现实世界中的实体经过抽象以后,就可以成为计算机上所处理的数据。数据结构课程主要是研究非数值计算的
4、程序设计问题中所出现的计算机操作对象以及它们之间的关系和操作的学科。数据结构是介于数学、计算机软件和计算机硬件之间的一门计算机专业的核心课程,它是计算机程序设计、数据库、操作系统、编译原理及人工智能等的重要基础,广泛的应用于信息学、系统工程等各种领域。学习数据结构是为了将实际问题中所涉及的对象在计算机中表示出来并对它们进行处理。通过课程设计可以提高学生的思维能力,促进学生的综合应用能力和专业素质的提高。通过此次课程设计主要达到以下目的:一、 了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;二、 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;三、 提
5、高综合运用所学的理论知识和方法独立分析和解决问题的能力;四训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风2.需求分析2.1课程设计的内容和要求(包括原始数据、技术要求、工作要求等)二叉树的遍历: 对任意给定的二叉树(顶点数自定)建立它的二叉链表存贮结构,并利用栈的五种基本运算(置空栈、进栈、出栈、取栈顶元素、判栈空)实现二叉树的先序、中序、后序三种遍历,输出三种遍历的结果。画出搜索顺序示意图。2.2选题的意义及背景二叉树的链式存储结构是用指针建立二叉树中结点之间的关系。二叉链存储结构的每个结点包含三个域,分别是数据域,左孩子指针域,右孩子指针域。因
6、此每个结点为leftchild data rightchild 由二叉树的定义知可把其遍历设计成递归算法。共有前序遍历、中序遍历、后序遍历。可先用这三种遍历输出二叉树的结点。采用递归算法设计,以前序遍历为例,它要求首先要访问根节点,然后前序遍历左子树和前序遍历右子树。特点在于所有未被访问的节点中,最后访问结点的左子树的根结点将最先被访问,这与堆栈的特点相吻合。因此可借助堆栈实现二叉树的递归遍历。将输出结果与递归结果比较来检验正确性,因此程序结果可做成菜单方便这两种算法的结果查看。3.概要设计 3.1设计思想建立一个完全二叉树用堆栈实现的前序遍历:算法思想: (1).初始化一个堆栈 (2).把根
7、节点的指针入栈 (3).当堆栈非空时执行循环步骤a 到步骤 c a. 出栈取得一个结点指针,访问该结点. b. 若该结点的右子树非空,将该结点的右子树指针入栈 c. 若该结点的左子树非空,将该结点的左子树指针入栈 用堆栈实现的中序遍历:算法思想: (1).初始化一个堆栈 (2).将根结点的所有左结点入栈 (3).当堆栈非空时执行循环步骤a 到步骤 d a. 出栈取得一个结点指针 b. 若该结点的右子树非空并且未被访问,将该结点的右子树指针入栈 c. 访问该结点 d. 若该结点的左子树非空并且未被访问,将该结点的左子树指针入栈 用堆栈实现的后序遍历 算法思想: (1).初始化一个堆栈 (2).将
8、根结点的所有左结点入栈 (3)当堆栈非空时执行循环步骤a 到步骤 d a. 出栈取得一个结点指针 b. 若该结点的右子树非空并且未被访问,将该结点的右子树指针入栈 c. 若该结点的左子树非空并且未被访问,将该结点的左子树指针入栈 d. 访问该结点 例如:输入5节点的二叉树。它的前序遍历为:1 2 4 5 3 6 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
9、 std;typedef struct BTreeNodeint where;struct BTreeNode *rightChild;struct BTreeNode *leftChild;TYPE_B_TREE_NODE,*TYPE_pB_TREE_NODE;/堆栈的结构class TStackpublic: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;
10、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 *base;/指向指针的指针;void TStack:push(TYPE_pB_TREE_NODE pNode)*top=pNode;top+;TYPE_pB_TREE_NODE TStack:pop()TYPE_pB_TREE_NODE returnValue;top-;return
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二叉 遍历
限制150内