版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、安徽工程大学数 据 结 构课 程 设 计 说 明 书 学生姓名: 刘超学 号:3120702109 学 院:计算机与信息学院专 业:信息与计算科学题 目:二叉树的创建和遍历指导教师潘海玉 2014年8月25日目录1. 需求分析-12. 概要设计-13. 详细设计-34. 调试分析-95. 课程总结-106. 附录 -121. 需求分析问题描述:根据运行时输入的先序序列,创建一棵二叉树,分别对其 进行先序、中序、后序、层序遍历,并显示遍历结果。void CreateBTree(BTree &
2、;T) /按先序次序输入,构造二叉树void PreOrder(BTree T) /递归先序遍历void InOrder(BTree T) /递归中序遍历void PostOrder(BTree T) /递归后序遍历void LevelOrder(BTree T) /层序遍历void NRPreOrder(BTree bt) /非递归先序遍历void NRInOrder(BTree bt) /非递归中序遍历void NRPostOrder(BTree bt) /非递归后序遍历void main() /二叉树的建立与遍历实现2.概要设计此次课程设计遍历算法的框架图层序遍历遍历算法递归遍历非递归遍
3、历先序遍历中序遍历后序遍历先序遍历中序遍历后序遍历 此次课程设计所用的三组二叉树 AACBCB DFEEFDGHABFGCDEH本设计所使用的存储结构:typedef char ElemType;/定义二叉树结点值的类型为字符型typedef struct bnode/二叉链表结构定义ElemType data;struct bnode *lchild,*rchild;Bnode,* BTree;typedef struct BTree ptr; int tag;stacknode;3.详细设计void CreateBTree(BTree &T)/按先序次序输入,构造二叉链表表示的二叉
4、树T,#表示空树char ch;ch=getchar(); if(ch='#') T=NULL;/读入#时,将相应节点指针置空elseif(!(T=(Bnode *)malloc(sizeof(Bnode) printf("创建失败!");/生成结点空间T->data=ch;CreateBTree(T->lchild);/构造二叉树的左子树CreateBTree(T->rchild);/构造二叉树的右子树void PreOrder(BTree T)/递归先序遍历if(T)printf("%c ",T->data);
5、PreOrder(T->lchild);PreOrder(T->rchild);void InOrder(BTree T)/递归中序遍历if(T)InOrder(T->lchild);printf("%c ",T->data);InOrder(T->rchild);void PostOrder(BTree T)/递归后序遍历if(T)PostOrder(T->lchild);PostOrder(T->rchild);printf("%c ",T->data);void LevelOrder(BTree T)
6、/层序遍历BTree QMAX;int front=0,rear=0;BTree p;if(T) /根结点入队Qrear=T;rear=(rear+1)%MAX; while(front!=rear)p=Qfront; /队头元素出队front=(front+1)%MAX; printf("%c ",p->data);if(p->lchild) /左孩子不为空,入队Qrear=p->lchild;rear=(rear+1)%MAX;if(p->rchild) /右孩子不为空,入队Qrear=p->rchild;rear=(rear+1)%MAX
7、;void NRPreOrder(BTree bt)/非递归先序遍历BTree stackMAX,p;int top;if (bt!=NULL)top=0;p=bt;while(p!=NULL|top>0) while(p!=NULL) printf("%c",p->data);stacktop=p;/预留p指针在数组中top+;p=p->lchild; if (top>0) top-; p=stacktop; p=p->rchild;/*左子树为空,进右子树*/void NRInOrder(BTree bt)/非递归中序遍历BTree sta
8、ckMAX,p;int top;if (bt!=NULL)top=0;p=bt;while(p!=NULL|top>0)while(p!=NULL) stacktop=p; /预留p指针在数组中top+;p=p->lchild; if (top>0)top-; p=stacktop;printf("%c",p->data); p=p->rchild;/*左子树为空,进右子树*/void NRPostOrder(BTree bt)/非递归后序遍历 stacknode sMAX,x; BTree p=bt;int top;if(bt!=NULL)
9、top=0;p=bt;dowhile (p!=NULL) /遍历左子树stop.ptr = p; stop.tag = 1; /标记为左子树top+;p=p->lchild;while (top>0 && stop-1.tag=2)x = s-top;p = x.ptr;printf("%c",p->data); /tag为R,表示右子树访问完毕,故访问根结点 if (top>0)stop-1.tag =2; /遍历右子树p=stop-1.ptr->rchild; while (top>0);4.调试分析 一组测试树 运行
10、时界面 5.课程总结这个程序的代码较为简单,可以实现了二叉树的三种递归遍历算法和三种非递归遍历算法还有层序遍历算法,想要改进的话可以在选择功能上下手,建立的时候提示更人性化,对输入的数据进行有效性验证,也可以改进为对遍历算法进行选择等等。二叉树这个数据结构几乎在每一本的数据结构的书都作为重点内容讲述,足见其在算法和程序设计界的重要地位。但是,到目前为止,自己还没有真正体验到它的威力,可能是学习的还不够深刻。像二叉树遍历的算法,用递归的算法只是简单的几行代码,然后就可以实现输出遍历次序。对于非递归的思想,要用到栈这个数据结构,但是对于二叉树遍历问题来说非递归要较递归复杂。程序一开始总是出现语法错
11、误,改了很多次也上网查了相关资料,才最后改为现在可以成功运行的程序。在这个过程中,我体会到开发工程师的感觉了,就是要用挑剔的眼光想问题并且不断地改进自己的程序。通过这次课程设计逐渐提高了自己的程序设计和调试能力,通过上机实习,严整自己设计算法的正确性,学会了有效利用基本调试方法,查找出代码中的错误并且修改。我会继续我的兴趣编写程序的,相信在越来越多的尝试之后,自己会不断进步和提高。6.附录#include <stdlib.h>#include <stdio.h>#include<iostream.h>#define MAX 10 /结点个数不超过10个typ
12、edef char ElemType;/定义二叉树结点值的类型为字符型typedef struct bnode/二叉链表结构定义ElemType data;struct bnode *lchild,*rchild;Bnode,* BTree;void CreateBTree(BTree &T)/按先序次序输入,构造二叉链表表示的二叉树T,#表示空树char ch;ch=getchar(); if(ch='#') T=NULL;/读入#时,将相应节点指针置空elseif(!(T=(Bnode *)malloc(sizeof(Bnode) printf("创建失败
13、!");/生成结点空间T->data=ch;CreateBTree(T->lchild);/构造二叉树的左子树CreateBTree(T->rchild);/构造二叉树的右子树void PreOrder(BTree T)/递归先序遍历if(T)printf("%c ",T->data);PreOrder(T->lchild);PreOrder(T->rchild);void InOrder(BTree T)/递归中序遍历if(T)InOrder(T->lchild);printf("%c ",T->
14、;data);InOrder(T->rchild);void PostOrder(BTree T)/递归后序遍历if(T)PostOrder(T->lchild);PostOrder(T->rchild);printf("%c ",T->data);void LevelOrder(BTree T)/层序遍历BTree QMAX;int front=0,rear=0;BTree p;if(T) /根结点入队Qrear=T;rear=(rear+1)%MAX; while(front!=rear)p=Qfront; /队头元素出队front=(front
15、+1)%MAX; printf("%c ",p->data);if(p->lchild) /左孩子不为空,入队Qrear=p->lchild;rear=(rear+1)%MAX;if(p->rchild) /右孩子不为空,入队Qrear=p->rchild;rear=(rear+1)%MAX;void NRPreOrder(BTree bt)/非递归先序遍历BTree stackMAX,p;int top;if (bt!=NULL)top=0;p=bt;while(p!=NULL|top>0) while(p!=NULL) printf(
16、"%c",p->data);stacktop=p;/预留p指针在数组中top+;p=p->lchild; if (top>0) top-; p=stacktop; p=p->rchild;/*左子树为空,进右子树*/void NRInOrder(BTree bt)/非递归中序遍历BTree stackMAX,p;int top;if (bt!=NULL)top=0;p=bt;while(p!=NULL|top>0)while(p!=NULL) stacktop=p; /预留p指针在数组中top+;p=p->lchild; if (top&
17、gt;0)top-; p=stacktop;printf("%c",p->data); p=p->rchild;/*左子树为空,进右子树*/typedef struct BTree ptr; int tag;stacknode;void NRPostOrder(BTree bt)/非递归后序遍历 stacknode sMAX,x; BTree p=bt;int top;if(bt!=NULL) top=0;p=bt;dowhile (p!=NULL) /遍历左子树stop.ptr = p; stop.tag = 1; /标记为左子树top+;p=p->lc
18、hild;while (top>0 && stop-1.tag=2)x = s-top;p = x.ptr;printf("%c",p->data); /tag为R,表示右子树访问完毕,故访问根结点 if (top>0)stop-1.tag =2; /遍历右子树p=stop-1.ptr->rchild; while (top>0);void main()/主函数BTree T;T=NULL;int select;while(1)printf("nnn请选择要执行的操作:n");printf("1.创建二叉树n");printf("2.二叉树的递归遍历算法(前、中、后)n");printf("3.二叉树的层次遍历算法n");printf("4.二叉树的非递归遍历算法(前、中、后)n"); printf("0.退出n");printf("输入:"); cin>>select;switch(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 化工总控工安全生产知识考核试卷含答案
- 出生缺陷防控咨询师岗中安全风险考核试卷含答案
- 手绣工岗中综合评估考核试卷含答案
- 石膏装饰板加工工安全培训考核试卷含答案
- 精对(间)苯二甲酸装置操作工工作强化考核试卷含答案
- 三七灰土专项施工方案(完-整版)
- 充电桩安装施工方案范本
- 2026人工智能训练师三级考试题及答案
- hdpe内衬管施工方案
- 万吨级连续化生产装置中烷基多糖苷色泽控制的工程热力学
- 发展经济学 马工程课件 13.第十三章 技术进步与创新
- GB/T 19816.5-2005涂覆涂料前钢材表面处理喷射清理用金属磨料的试验方法第5部分:缺陷颗粒百分比和微结构的测定
- GB/T 16554-2017钻石分级
- GB/T 14846-2014铝及铝合金挤压型材尺寸偏差
- GA 979-2012D类干粉灭火剂
- 结构的极限荷载课件
- 2023年新疆国际陆港(集团)有限责任公司招聘笔试题库及答案解析
- 医院管理案例外来器械植入物闭环管理课件
- GB∕T 2518-2019 连续热镀锌和锌合金镀层钢板及钢带
- 水稳拌和站建设方案详细
- DLT 596-2021 电力设备预防性试验规程
评论
0/150
提交评论