学位论文—基于二叉树遍历系统设计与实现课程设计
课程设计任务书7-二叉树的遍历与应用算法设计与实现

12月31日~1月2日:进行详细设计,确定各模块的算法思路;
1月ቤተ መጻሕፍቲ ባይዱ日~1月6日:进行编码实现;
1月7日~1月9日:进行测试调试,完善设计;撰写设计说明书,准备答辩;
1月10日:答辩。
四、主要参考资料
1.严蔚敏,吴伟民.数据结构.清华大学出版社,2007.
2.苏仕华.数据结构课程设计.机械工业出版社,2010.
3.滕国文.数据结构课程设计.清华大学出版社,2010.
指导教师(签名):
教研室主任(签名):
注:可以附页
数据结构课程设计任务书
一、设计题目、内容及要求
1、设计题目:二叉树的遍历与应用算法设计与实现。
2、设计内容及要求:
(1)使用二叉链表建立二叉树的存储结构。
(2)实现二叉树的先序、中序、后序和层序遍历。
(3)实现二叉树两种应用算法,如计算二叉树中的叶子结点的个数、求二叉树的深度、将二叉树中所有结点的左右孩子互换、求二叉树从根到叶子的路径、判断二叉树是否为完全二叉树等应用算法。
二、要求的设计成果(课程设计说明书、设计实物、图纸等)
1、用C语言进行程序设计,实现程序的功能。注重算法效率,代码要有适当的注释;
2、撰写课程设计说明书一份,不少于2000字。课程设计说明书应包括封面、任务书、成绩评定表、正文(设计思路、设计步骤等)、参考文献(资料)、附录(程序代码)等内容。
三、进程安排
(完整word版)二叉树的遍历--课程设计

课程设计课程设计名称:数据结构课程设计专业班级:学生姓名:学号:指导教师:课程设计时间:数据结构专业课程设计任务书说明:本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文)首页一、需求分析1.1课程设计题目、任务及要求二叉树.用链表作存储结构(1)对二叉树作各种遍历,输出结果;(4)输入元素x,查找二叉树的左孩子,右孩子,如果找到则删除该结点,没有找到就退出,返回错误。
1.2课程设计思想建立二叉树采用一个一个输入的方式。
对二叉树进中序遍历采用递归函数和非递归函数分别实现多种遍历的方式。
另外还有层次遍历,来充分实现本书对树的遍历。
删除结点函数,采用边查找边删除的方式。
如果没有查找到,则不对树做任何的修改;如果查找到结点则删除.一、系统总体设计3。
1 系统模块划分二叉树是一种动态树表。
开辟一个空间建立一个节点,逐个加入,逐个建立。
利用查找函数,对数进行插入删除利用书中所学知识进行各种遍历,包括将所有方法归并在一起,还要建立查看界面一边有系统的视觉效果.3.2 二叉树的生成过程二叉树的生成,采用逐个建立的方式。
如图3。
3 主要功能模块设计程序主要设计了五个功能:首先是创建二叉排序树,完成后出现任务菜单,菜单中设计了四个模块:退出,中序遍历,计算平均查找长度和删除结点。
主函数流程如下:图3。
1.1主函数流程图4 系统详细设计4.1 主函数菜单模块该模块功能主要是给用户提供清晰的可操作界面,易于人机操作,并能很好的调用其他各模块,使程序更加优化,丝路更加清晰,结构更加明了,提高了程序的实用性。
其算法如下:(完整word版)二叉树的遍历--课程设计void main(){int n,m=1;BiTree t;while(m){menu();scanf("%d”,&n);switch(n){case 1:{/*初始化*/int flag;datatype x;printf(”请输入头结点x:\n");scanf("%d”,&x);flag=Initiate(&t,x);if(flag==1)printf(”\n初始化成功!”);elseprintf(”\n初始化失败!”);break;}case 2:{printf(”\n请继续添加结点建立二叉树”);/*建树*/ break;}case 3:{/*插入结点x作为a的左孩子*/datatype a,x;/*x作为a的左孩子*/BiTree parent=t;printf("请输入双亲a和左孩子x:\n");scanf(”%d%d",&a,&x);parent=Find(parent,a);parent=InsertL(t,x,parent);if(parent!=NULL)t=parent;break;}case 4:{/*插入结点x作为a的右孩子*/datatype a,x;/*x作为a的右孩子*/ BiTree parent=t;printf("请输入双亲a and右孩子x:\n”);scanf(”%d%d",&a,&x);parent=Find(parent,a);parent=InsertR(t,x,parent);if(parent!=NULL)t=parent;break;}case 5:{/*删除结点a的左孩子*/ datatype a;BiTree parent=t;printf(”please input a:\n”);scanf(”%d”,&a);parent=Find(parent,a);parent=DeleteL(t,parent);if(parent!=NULL)t=parent;break;}case 6:{/*删除结点a的左孩子*/ datatype a;BiTree parent=t;printf("please input a:\n"); scanf("%d",&a);parent=Find(parent,a);parent=DeleteR(t,parent);if(parent!=NULL)t=parent;break;}case 7:{/*递归先序遍历*/ PreOrder(t);break;}case 8:{/*递归中序遍历*/ InOrder(t);break;}case 9:{/*递归后序遍历*/ PostOrder(t);break;}case 10:{/*层次遍历*/ LevelOrder(t);break;}case 11:{/*先序遍历的非递归实现*/ NRPreOrder(t);break;}case 12:{/*中序遍历的非递归实现*/ NRInOrder(t);break;}case 13:{/*后序遍历的非递归实现*/NRPostOrder(t);break;}case 0:m=0;}}}4。
数据结构_二叉树的遍历_课程设计_实验报告

2.1.1 用单链表 s 记录输入的数据 2.1.2 利用非递归调用分别生成根节点的左子树和右子树。 2.1.3 返回菜单重新选择。
基本程序如下:
void CreatBiTree_q(BiTree &T)/ { · · · · · · if(ch=='#') T=NULL; else { T=(BiTree)malloc(sizeof(BiTNode)); if(!T) exit(0); T->data=ch; T->LTag=Link; T->RTag=Link;
5
int right=0; typedef char TElemType;
typedef struct BiTNode { TElemType data; struct BiTNode *lchild,*rchild; int LTag, RTag,flag; }BiTNode,*BiTree; BiTree pre; void CreatBiTree_q(BiTree &T) { TElemType ch; scanf("%c",&ch); if(ch=='#') T=NULL; else { T=(BiTree)malloc(sizeof(BiTNode)); if(!T) exit(0); T->data=ch; T->LTag=Link; T->RTag=Link; CreatBiTree_q(T->lchild); CreatBiTree_q(T->rchild); } } void CreateBiTree(BiTree *T) { TElemType ch; scanf("%c",&ch); if(ch=='#') *T=NULL; else { *T=(BiTree)malloc(sizeof(BiTNode)); if(!*T) exit(-1); (*T)->data=ch;
二叉树遍历-教学设计

二叉树遍历--教学设计所属学科:数据库专业:计算机(相关学科)课程:数据结构适用对象:大二上学期本课所讲解的内容为二叉树遍历的三种基本方法和一种新颖的方法,所属学科为数据结构与算法。
数据结构与算法是计算机专业的重要基础课,也是非计算机专业学生在大学生计算机等级考试中的课程之一,是一门集技术性、理论性和实践性于一体的课程。
故本微课结合该课程特点,合理分配知识结构及节奏,并融充分合多媒体技术,算法描述清晰,展现内容丰富,适合课堂教学,也便于自学,可作为高等院校计算机专业和其他相关专业的参考资料,也可供参加全国普通高校非计算机专业大学生计算机等级考试(CCT)的学生及计算机爱好者学习和参考。
教学思想:本课内容没有太过繁琐的语言,而是采用与多媒体充分融合的方式,并采用部分flash动画讲解遍历方法,生动、简洁、丰富地展现教学内容,教学思路清晰。
提高了教学效率和教学质量,使学生在单位时间内能够学到更多的知识,更大幅度地提高学生各方面的能力,从而使学生获得良好的发展。
课程设计思路:遍历是二叉树上最重要的运算之一,是二叉树上进行其它运算之基础。
由于访问结点所做的操作依赖于具体的应用问题,所以我们对所讲解的问题分别举了一个容易和较难的例子,并配上一个难度适中的启发式的习题思考,在讲解过程中让学生充分理解,并学会运用不同的遍历方式解决问题,最后加上顺口溜式的总结,使学生对知识点更加融会贯通。
教学特色:1、教学思路清晰。
对于遍历的讲解是按照遍历概念、实例、动画演示、算法和总结的步骤进行的,效果较好。
2、在视频讲解中,语言生动而富于亲和力,表达多样,激发学生兴趣。
通过改变教学内容的展现形式,更具独到趣味,激发学生内外动力来实现。
3、在课件中,我们的幻灯片布局简洁,动画紧随讲解节奏的推进而随时跟进,生动形象,而又清晰明了地将所讲的知识点呈现出来,充分运用了现代多媒体教学方式的优点。
4、在PPT中我们插入了Flash动画,让遍历方法更加清晰明了,让学习者更容易理解与掌握。
基于二叉树遍历系统设计与实现

长春建筑学院《数据结构》课程设计(论文)基于二叉树遍历系统设计与实现Binary tree traversal System Design and Implementation年级:学号:姓名:专业:指导老师:二零一三年十二月摘要针对现实世界中许多关系复杂的数据,如人类社会的家谱,各种社会组织机构,博弈交通等复杂事物或过程以及客观世界中广泛存在的具有分支关系或层次特性的对象.如操作系统的文件构成、人工智能和算法分析的模型表示以及数据库系统的信息组织形式等,用线性结构难以把其中的逻辑关系表达出来,必须借助于数和图这样的非线性结构,因此在以模拟客观世界问题,解决客观世界问题为主要任务的计算机领域中树型结构是信息的一种重要组织形式,树有着广泛应用。
在树型结构的应用中又以二叉树最为常用。
二叉树是一种非常重要的非线性结构,所描述的数据有明显的层次关系,其中的每个元素只有一个前驱,二叉树是最为常用的数据结构,它的实际应用非常广泛,二叉树的遍历方式有三种,前序遍历,中序遍历,后序遍历,先序遍历的顺序为:NLR 先根结点,然后左子树,右子树;中序遍历顺序为;LNR先左子树,然后根结点,右子树;后序遍历顺序为:LRN先左子树,然后右子树,根结点。
由前序和中序遍历,有中序和后序遍历序列可以唯一确定一棵二叉树。
对于给几个数据的排序或在已知的几个数据中进行查找,二叉树均能提供一种十分有效的方法,比如在查找问题上,任何借助于比较法查找长度为Ⅳ的一个序表的算法,都可以表示成一株二叉树。
反之,任何二叉树都对应一个查找有序表的有效方法根据树的数学理论,对于算法分析的某些最有启发性的应用,是与给出用于计算各种类型中不同树的数目的公式有关的。
本文对二叉树以及二叉树的各种功能做介绍以及写出一些基本的程序,让读者对二叉树的理解有更好的效果。
关键词:二叉树;左子树;右子树AbstractIn many real world of complex data, such as the human society family, social organization, widespread game traffic complex thing or process and the objective world with a branch or level characteristics of the object. If the operating system file analysis, artificial intelligence and algorithm model representation and database information system the form of organization, with a linear structure to express the logic relationship among them, must depend on the number and the diagram of such nonlinear structure, so in order to simulate the objective world, solve problems as the main task of the computer field in the tree structure is an important organization form of information, the tree has a broad application. In the application of tree structure in which the two fork tree is the most commonly used.Two binary tree is a kind of very important nonlinear structure, hiberarchy description of the data, where each element is only a precursor, two fork tree is the most commonly used data structure, its application is very extensive, there are three kinds of two binary tree traversal, preorder traversal, in the traversal, postorder traversal, preorder traversal sequence: NLR to the root node, and then the left subtree, right subtree; in order traversal sequence; LNR before the left sub tree, then the root node, the right subtree; after the traversal order: LRN first and then the left subtree, right subtree, root node. By preorder traversal and traversal, with the order and post order traversal sequence can be uniquely identified a two binary tree.For several data sorting or searching in several data known, two fork tree can provide a very effective method, such as search problems, any by the comparison method to find the length of a sequential algorithm of Table IV, can be expressed as a two fork tree. Conversely, any two fork tree corresponds to an effective method to find the ordered list according to the mathematical theory of tree, for some algorithm analysis of the application of heuristic, is given for the number and different types of tree calculation formula.Various functions of two binary tree and binary tree in this paper two introduces and write some of the basic procedures, to allow readers to understand the two fork tree has a better effect.Keywords:Two tree; the left subtree; right subtree目录摘要 (I)ABSTRACT (Ⅱ)第1章绪论 ................................................................................................................ - 1 -1.1设计目的 (1)1.2设计内容 (1)1.3设计要求 (1)1.4设计思想 (2)1.5系统模块划分 (2)1.6主要功能模块设计 (2)第2章系统总体设计 (3)2.1基本理论 (3)2.2概要设计 (3)第3章详细设计 (4)3.1建立二叉树 (4)3.2二叉树的层次遍历和中序遍历 (4)3.3求二叉树的深度 (7)3.4将二叉树中所有结点的左右子树相互交换 (7)3.5求二叉树中叶子结点的数目 (9)第4章流程分析图 (11)4.1流程图 (11)4.2主要功能模块设计 (11)4.3模块设计 (12)4.4函数主要调用关系图 (13)第5章系统测试 (14)5.1调试分析 (14)5.2实验结果 (15)结论 (17)致谢 (18)参考文献 (18)第1章绪论引言:树型结构是一类重要的非线性数据结构,其中一树和二叉树最重要。
二叉树的遍历以及树与二叉树的转换课程设计

课程设计(数据结构)院、系专业姓名学号指导教师2010 年月日树的应用摘要:关键词:树;二叉树;转换;遍历;递归和非递归1.实验题目实现树与二叉树的转换的实现。
以及树的前序、后序的递归、非递归算法,层次序的非递归算法的实现,应包含建树的实现。
2.实验分析2.1总体分析2.1.1本程序的功能是对任意二叉树进行递归前序遍历和后序遍历,用栈实现非递归的前序、和后序遍历,还有对树的层序遍历以及树与二叉树的转换。
2.1.2本程序要求用户以字符输入,若要实现终端结点,最后以回车键建入数据。
2.1.3本程序的结果将依次打印出递归前序遍历和后序遍历,用栈实现非递归的前序和中序遍历和后序遍历,和线索化层序遍历,输入树及树传换成二叉树。
2.2具体分析2.2.1二叉树创建用链表实现创建一个树结点的结构体,从键盘输入数据,存入数组。
把下标为2*i+1 的值存入左孩子,为2*i+2的存入右孩子。
BiNode creat(),BiNode stree_creat(char *a,int k)。
2.2.2先序遍历二叉树的递归算法若二叉树为空,则空操作;否则(1)访问根结点;(2)先序遍历左子树;(3)先序遍历右子树。
void PreOrder(BiNode root)。
2.2.3中序遍历二叉树的递归算法若二叉树为空,则空操作;否则(1)中序遍历左子树;(2)访问根结点;(3)中序遍历右子树。
void InOrder(BiNode root)。
2.2.4后序遍历二叉树的递归算法若二叉树为空,则空操作;否则(1)后序遍历左子树;(2)后序遍历右子树。
(3)访问根结点;void PostOrder(BiNode root)。
2.2.5先序非递归算法BiNode根指针,若 BiNode!= NULL对于非递归算法,引入栈模拟递归工作栈,初始时栈为空。
问题:如何用栈来保存信息,使得在先序遍历过左子树后,能利用栈顶信息获取 BiNode的右子树的根指针?void F_PreOrder(BiNode root)2.2.6中序非递归算法BiNode是要遍历树的根指针,中序遍历要求在遍历完左子树后,访问根,再遍历右子树。
二叉树课程设计毕业设计(论文)

目录1 问题描述 (1)2 需求分析 (1)3 概要设计 (1)3.1模块划分……………………………………………………….错误!未定义书签。
4 详细设计.................................................................................... (6)4.1主要模块流程图 (7)4.2 数据类型的定义 (8)4.3 主要模块的算法描述 (8)5 测试分析 (14)6 课程设计总结 (17)参考文献 (18)附录(源程序清单) (19)1 问题描述建立一棵二叉树;再以广义表表示法输出这棵二叉树;然后对该树进行先序、中序、后序遍历及层次遍历。
要求:(1)采用二叉链表存储二叉树;(2)先序、中序、后序遍历设计非递归算法。
2 需求分析二叉树一种数据结构,用于保存和处理树状的数据,比如家谱。
他的应用极为广泛,因为根据数据结构的理论,任何复杂的树够可以转换为二叉中并进行处理,二叉树在排序、查找、大规模数据索引方面有很多很多应用。
而且二叉树排序是简单算法排序中速度最快的。
在二叉树的一些应用中,常常要求在树中查找具有某种特征的节点,或者对树中全部节点逐一进行某种处理。
这就提出了遍历二叉树。
根据遍历的方向的选择,就有了前序遍历,中序遍历和后序遍历以及层次遍历二叉树。
因此掌握二叉树的各种遍历二叉树算法非常重要,而且高效的遍历算法能够节省很多成本。
3 概要设计3.1模块划分本程序包括七个模块:(1)主程序模块void main(){初始化;以广义表表示法输出;建立二叉树;非递归先序遍历二叉树并输出;非递归中序遍历二叉树并输出;非递归后序遍历二叉树并输出;层次遍历二叉树并输出;}(2)以广义表表示法输出——实现对二叉树的输出(3)二叉树建立模块——建立一个二叉树并对二叉树进行初始化(4)非递归先序遍历模块——实现对二叉树的递归先序遍历并输出(5)非递归中序遍历模块——实现对二叉树的递归中序遍历并输出(6)非递归后序遍历模块——实现对二叉树的递归后序遍历并输出(7)层次遍历模块——实现对二叉树的层次遍历并输出4 详细设计4.1主要模块流程图主流程图建立一棵二叉树以广义表表示法输出一棵二叉树非递归先序遍历非递归中序遍历非递归后序遍历层次遍历4.2数据类型的定义(1)二叉树的二叉链表存储类型typedef struct BiTNode{char data;struct BiTNode *lchild,*rchild;} BiTNode,*BiTree;(2)栈类型的定义typedef struct SqStack/*定义一个顺序栈*/{BiTNode *base;BiTNode *top;int stacksize;}SqStack;void InitStack(SqStack *S)/*栈的初始化*/{S->base=(BiTNode*)malloc(STACK_INIT_SIZE*sizeof(BiTNode));S->top=S->base;S->stacksize=STACK_INIT_SIZE;}void Push(SqStack *S,BiTNode e)/*入栈算法*/{if(S->top-S->base>=S->stacksize){S->base=(BiTNode*)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(BiTNode));S->top=S->base+S->stacksize;S->stacksize+=STACKINCREMENT;}*(S->top)=e;S->top++;}BiTNode Pop(SqStack *S)/*出栈算法*/{S->top --;return *S->top;}int StackEmpty(SqStack *S)/*判栈空*/{if(S->top == S->base )return 1;elsereturn 0;}4.3主要模块的算法描述(1)主函数void main(){BiTree Ta;int a=1;printf("请创建树\n");Ta=CreateBiTree();printf("广义表表示法输出二叉树\n");printfBTree(Ta);printf("\n");printf(" 请选择:\n");printf(" (1)先序遍历\n");printf(" (2)中序遍历\n");printf(" (3)后序遍历\n");printf(" (4)层次遍历\n");printf(" (0)结束程序\n");while(a){scanf("%d",&a);if(a==1){(2)建立二叉树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);}(3)用广义表表示法输出二叉树void printfbitree(t)/*用广义表表示法输出二叉树*/{if(t!=NULL){printf("%c",t->data);if(t->lchild!=NULL||t->rchild!=NULL){printf("(");printfbitree(t->lchild);if(t->rchild!=NULL)printf(",");printfbirree(t->rchild);printf(")");}}}(4)非递归先序遍历二叉树void PreOrder(BiTree T)/*非递归先序遍历二叉树*/ {SqStack S;BiTree p=T;InitStack(&S);if(p)Push(&S,*p);while(!StackEmpty(&S)){p=(BiTNode *)malloc(sizeof(BiTNode));*p=Pop(&S);printf("%c",p->data);if(p->rchild)Push(&S,*p->rchild);if(p->lchild)Push(&S,*p->lchild);}}(5)非递归中序遍历二叉树void InOrder(BiTree T)/* 非递归中序遍历二叉树*/ {SqStack S;BiTree p=T;InitStack(&S);while(p||!StackEmpty(&S)){if(p){Push(&S,*p);p=p->lchild;}else{p=(BiTNode *)malloc(sizeof(BiTNode));*p=Pop(&S);printf("%c",p->data);p=p->rchild;}}}(6)非递归后序遍历二叉树void PostOrder(BiTree T)/ *非递归后序遍历二叉树*/ SqStack S;BiTNode p, *l, *r;InitStack(&S);Push(&S, *T);while(!StackEmpty(&S)){p = Pop(&S);l = p.lchild;r = p.rchild;if (l == NULL && r == NULL){printf("%c", p.data);}else{p.lchild = NULL;p.rchild = NULL;Push(&S, p);if (r != NULL) Push(&S, *r);if (l != NULL) Push(&S, *l);}}}(7)层次遍历void LevelOrderTraverse(BiTree T) /*层序遍历*/ {BiTree Q[STACK_INIT_SIZE];int front=0,rear=0;BiTree p;if(T){ //根结点入队Q[rear]=T;rear=(rear+1)%STACK_INIT_SIZE;}while(front!=rear){p=Q[front]; //队头元素出队front=(front+1)%STACK_INIT_SIZE;printf("%c",p->data);if(p->lchild){ //左孩子不为空,入队Q[rear]=p->lchild;rear=(rear+1)%STACK_INIT_SIZE;}if(p->rchild){ //右孩子不为空,入队Q[rear]=p->rchild;rear=(rear+1)%STACK_INIT_SIZE;}}}5 测试分析6 课程设计总结通过这次课程设计使我充分的理解了从建立二叉树到输出二叉树再遍历二叉树的基本原理与算法,尤其是深刻的学习了二叉树遍历的非递归实现的算法。
数据结构课程设计二 叉 树 遍 历 及 应 用

实验报告课程:数据结构课程设计设计题目:二叉树遍历及应用学号:班级:软件11k1姓名: 南方小羊指导教师:刘军二叉树的遍历1、问题描述利用先序遍历建立一棵二叉树,并分别用前序、中序、后序遍历该二叉树2、节点形式Lchild data Rchild3、说明(1)输入数据:1,2,3,0,0,4,0,0,5,0,0其中“0”表示空子树。
(2)输出数据:先序:1,2,3,4,5中序:3,2,4,1,5后序:3,4,2,5,1二叉树的应用1、问题描述运用二叉树的遍历的算法,编写算法分别实现如下功能。
(1)求出二叉树中的结点的总数。
(2)求出二叉树中的叶子数目。
(3)求出二叉树的深度。
运用上题所建立的二叉树,求出其结点总数、叶子数目、深度,最后释放所有结点。
二叉树结点结构中包数据域(data),指针域(*lchild,*rchild)。
结点结构的代码如下:typedef struct tree{int data;struct tree *lchild,*rchild;}*bitree;本实例使用的是二叉树,首先建立头结点,并且保存数据,然后根据递归方法,分别建立其左右孩子结点,且左右孩子结点的指针域指向空。
先序递归遍历时,输出第一个根结点数据,然后分别遍历左子树再遍历右子树,中序遍历,先访问根结点的左子树输出数据,再输出根结点的数据,再访问右子树,后序遍历先访问根结点的右子树,再访问根结点,再访问左子树输出。
统计二叉树叶子的个数可以看成一个遍历问题,访问一个结点,判断该结点是否为叶子,如果是将叶子树加1,可以采用任何遍历实现,求二叉树的深度是假设根结点为第一层的结点,所有K层结点的左右孩子在K+1层,所以可以通过先序遍历计算二叉树中每个结点的层数,其中最大的就是二叉树的深度。
四、实验心得:树结构是数据结构课程的典型内容,而且综合使用了多种逻辑结构,具有代表性,可以锻炼个人编程能力。
在刚开始选题后,我感觉无从下手,一是因为没有实践经验,二是因为对数据结构课程的内容没有把握到位,然后在参考一些专业书籍并且学习了之前其他人的课程设计,才逐渐可以上手去自己做。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
长春建筑学院《数据结构》课程设计(论文)基于二叉树遍历系统设计与实现Binary tree traversal System Design and Implementation年级:学号:姓名:专业:指导老师:二零一三年十二月摘要针对现实世界中许多关系复杂的数据,如人类社会的家谱,各种社会组织机构,博弈交通等复杂事物或过程以及客观世界中广泛存在的具有分支关系或层次特性的对象.如操作系统的文件构成、人工智能和算法分析的模型表示以及数据库系统的信息组织形式等,用线性结构难以把其中的逻辑关系表达出来,必须借助于数和图这样的非线性结构,因此在以模拟客观世界问题,解决客观世界问题为主要任务的计算机领域中树型结构是信息的一种重要组织形式,树有着广泛应用。
在树型结构的应用中又以二叉树最为常用。
二叉树是一种非常重要的非线性结构,所描述的数据有明显的层次关系,其中的每个元素只有一个前驱,二叉树是最为常用的数据结构,它的实际应用非常广泛,二叉树的遍历方式有三种,前序遍历,中序遍历,后序遍历,先序遍历的顺序为:NLR 先根结点,然后左子树,右子树;中序遍历顺序为;LNR先左子树,然后根结点,右子树;后序遍历顺序为:LRN先左子树,然后右子树,根结点。
由前序和中序遍历,有中序和后序遍历序列可以唯一确定一棵二叉树。
对于给几个数据的排序或在已知的几个数据中进行查找,二叉树均能提供一种十分有效的方法,比如在查找问题上,任何借助于比较法查找长度为Ⅳ的一个序表的算法,都可以表示成一株二叉树。
反之,任何二叉树都对应一个查找有序表的有效方法根据树的数学理论,对于算法分析的某些最有启发性的应用,是与给出用于计算各种类型中不同树的数目的公式有关的。
本文对二叉树以及二叉树的各种功能做介绍以及写出一些基本的程序,让读者对二叉树的理解有更好的效果。
关键词:二叉树;左子树;右子树AbstractIn many real world of complex data, such as the human society family, social organization, widespread game traffic complex thing or process and the objective world with a branch or level characteristics of the object. If the operating system file analysis, artificial intelligence and algorithm model representation and database information system the form of organization, with a linear structure to express the logic relationship among them, must depend on the number and the diagram of such nonlinear structure, so in order to simulate the objective world, solve problems as the main task of the computer field in the tree structure is an important organization form of information, the tree has a broad application. In the application of tree structure in which the two fork tree is the most commonly used.Two binary tree is a kind of very important nonlinear structure, hiberarchy description of the data, where each element is only a precursor, two fork tree is the most commonly used data structure, its application is very extensive, there are three kinds of two binary tree traversal, preorder traversal, in the traversal, postorder traversal, preorder traversal sequence: NLR to the root node, and then the left subtree, right subtree; in order traversal sequence; LNR before the left sub tree, then the root node, the right subtree; after the traversal order: LRN first and then the left subtree, right subtree, root node. By preorder traversal and traversal, with the order and post order traversal sequence can be uniquely identified a two binary tree.For several data sorting or searching in several data known, two fork tree can provide a very effective method, such as search problems, any by the comparison method to find the length of a sequential algorithm of Table IV, can be expressed as a two fork tree. Conversely, any two fork tree corresponds to an effective method to find the ordered list according to the mathematical theory of tree, for some algorithm analysis of the application of heuristic, is given for the number and different types of tree calculation formula.Various functions of two binary tree and binary tree in this paper two introduces and write some of the basic procedures, to allow readers to understand the two fork tree has a better effect.Keywords:Two tree; the left subtree; right subtree目录摘要 (I)ABSTRACT (Ⅱ)第1章绪论 ................................................................................................................ - 1 -1.1设计目的 (1)1.2设计内容 (1)1.3设计要求 (1)1.4设计思想 (2)1.5系统模块划分 (2)1.6主要功能模块设计 (2)第2章系统总体设计 (3)2.1基本理论 (3)2.2概要设计 (3)第3章详细设计 (4)3.1建立二叉树 (4)3.2二叉树的层次遍历和中序遍历 (4)3.3求二叉树的深度 (7)3.4将二叉树中所有结点的左右子树相互交换 (7)3.5求二叉树中叶子结点的数目 (9)第4章流程分析图 (11)4.1流程图 (11)4.2主要功能模块设计 (11)4.3模块设计 (12)4.4函数主要调用关系图 (13)第5章系统测试 (14)5.1调试分析 (14)5.2实验结果 (15)结论 (17)致谢 (18)参考文献 (18)第1章绪论引言:树型结构是一类重要的非线性数据结构,其中一树和二叉树最重要。
树结构在客观世界中广泛存在,如人类社会的族谱和各种社会组织机构够可以用树来形象表示。
树在计算机领域中也得到了广泛应用,如在编译程序中,可以用树来表示源程序的语法结构。
二叉树是一种非线性数据结构,对它进行操作时总需要对每个数据逐一进行操作,这样就存在一个操作顺序问题,由此提出了二叉树的遍历操作问题,所谓遍历二叉树就是按某种顺序访问二叉树中某个结点一次且仅一次的过程,这里的访问可以是输出.比较.更新.查看元素内容等各种操作。
1.1 设计目的1.掌握二叉树结点结构的建立。
2.掌握先序、中序和后序遍历的基本操作。
1.2 设计内容利用二叉树特点和功能实现先序、中序和后序遍历系统的实现,具体功能:输入、输出遍历结果、先序遍历、中序遍历和后序遍历,并能在屏幕上输出操作前后的结果。
1.3 设计要求1.写出系统需求分析,并建模。
2.编程实现,界面友好。
3.输出操作前后的结果。
4.提供测试报告。
1.4 设计思想1.建立二叉树采用一个一个输入的方式。
2.对二叉树进中序遍历采用递归函数和非递归函数分别实现多种遍历的方式。
另外还有层次遍历,来充分实现本书对树的遍历。
3.删除结点函数,采用边查找边删除的方式。
如果没有查找到,则不对树做任何的修改;如果查找到结点则删除。
1.5 系统模块划分1.二叉树是一种动态树表。
2.开辟一个空间建立一个节点,逐个加入,逐个建立。
3.利用查找函数,对数进行插入删除。
4.利用书中所学知识进行各种遍历,包括将所有方法归并在一起,还要建立查看界面一边有系统的视觉效果。
1.6 主要功能模块设计程序主要设计了几个功能:首先是创建二叉排序树,完成后出现任务菜单,菜单中设计了八个模块:树状输出二叉树,前序遍历二叉树,中序遍历二叉树,后序遍历二叉树,输出叶子结点,输出叶子结点个数,输出二叉树的深度,退出。
第2章系统总体设计2.1 基本理论(1)建立二叉树的操作就是用递归算法以先序遍历的次序从根结点开始建立一棵二叉树。