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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构课程设计二叉树.docx

1、数据结构课程设计二叉树目 录一、问题描述 1二、测试数据 1三、算法思想 1四、模块划分 1五、数据结构 2六、源程序 2七、测试情况 7八、设计体会 8参 考 文 献 9一、问题描述(1)用二叉链表存储表示法,定义一颗排序二叉树;(2)输入树的各个结点,用先序遍历的的顺序建立二叉链表。按先序输入二叉树中结点的值,创建二叉链表表示的二叉树T;(3)对建立的排序二叉树进行层次、先序、中序和后序遍历并统计该二叉树中叶子结点的数目;(4)用菜单实现各部分的操作;二、测试数据建立二叉树:ABC#DE#G#F#三、算法思想在本课程设计中涉及的算法大部分用了递归的算法思想。递归即是 一个过程和函数在其自定

2、义或说明中又直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解四、模块划分(1)void PreOrderTraverse(BiTree T)、void PostOrderTraverse(BiTree T)、void InOrderTraverse(BiTree T),这几个函数分别为前序、后序、中序遍历二叉树,都用了递归的算法思想,对二叉树进行不同次序的遍历。前、中、后序分别按根-左-右、左-根-右、左-右-根的顺序遍历结点;(2)void CreateBiTree(BiTree &T),此函数功能是通过先序遍历的的顺序建立二叉树。按先

3、序次序输入二叉树中结点的值(一个字符),创建二叉链表表示的二叉树T;(3)void lev_traverse(BiTree T) ,此函数功能为按层遍历二叉树。其中借鉴了循环队列进队、出队的算法思想,通过不断地对二叉树节点进行进队出队,从上到下从左到右遍历了二叉树;(4)int leaf(BiTree T),此函数用递归方法求二叉树的叶子数. 当某节点无左子树和右子树时,二叉树的叶子数就等于没有子树的节点个数。五、数据结构用二叉树的二叉链表存储法表示二叉树Ttypedef struct BiNode char data; /结点数据域struct BiNode *lchild,*rchild;

4、 /左右孩子指针BiTNode,*BiTree;六、源程序#includeusing namespace std;#define MAXQSIZE 100#define OK 1#define ERROR 0#define OVERFLOW -2typedef int Status;#define MAXSIZE 100typedef int Status;typedef struct BiNode /二叉树的二叉链表存储表示 char data; /结点数据域 struct BiNode *lchild,*rchild; /左右孩子指针BiTNode,*BiTree;typedef stru

5、ct BiTree *base; BiTree *top; int stacksize;SqStack;typedef struct BiTree *base;/初始化时动态分配存储空间 int front;/头指针 int rear;/尾指针SqQueue;Status InitQueue(SqQueue &Q) / 循环队列的初始化。构造一个空队列Q Q.base = new BiTreeMAXQSIZE; if(!Q.base) return OVERFLOW; / 存储分配失败 Q.front = 0; Q.rear = 0; return OK;int QueueLength(SqQ

6、ueue Q)/ 返回Q的元素个数,即队列的长度 return (Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;Status EnQueue(SqQueue &Q,BiTree e)/ 循环队列的入队,插入元素e为Q的新的队尾元素 if(Q.rear+1)%MAXQSIZE = Q.front) return ERROR;/尾指针在循环意义上加1后等于头指针,表明队满 Q.baseQ.rear = e; Q.rear = (Q.rear+1)%MAXQSIZE; return OK;Status DeQueue(SqQueue &Q,BiTree &e)/循环队列的出队

7、if(Q.rear = Q.front) return ERROR; e = Q.baseQ.front; Q.front = (Q.front+1)%MAXQSIZE; return OK;void CreateBiTree(BiTree &T) /先序遍历的的顺序建立二叉链表。按先序次序输入二叉树中结点的值(一个字符),创建二叉链表表示的二叉树T char ch; cin ch; if(ch=#) T=NULL; /递归结束,建空树 else T=new BiTNode; T-data=ch; /生成根结点 CreateBiTree(T-lchild); /递归创建左子树 CreateBi

8、Tree(T-rchild); /递归创建右子树 /else /CreateBiTreevoid PreOrderTraverse(BiTree T) /先序遍历二叉树T的递归算法 if(T) cout data; PreOrderTraverse(T-lchild); PreOrderTraverse(T-rchild); void PostOrderTraverse(BiTree T) /后序遍历二叉树T的递归算法 if(T) PostOrderTraverse(T-lchild); PostOrderTraverse(T-rchild); cout data; void InOrderT

9、raverse(BiTree T) /中序遍历的递归算法 if(T) InOrderTraverse(T-lchild); cout data; InOrderTraverse(T-rchild); void lev_traverse(BiTree T) /层序遍历SqQueue q;BiTree p;p=T;InitQueue(q);EnQueue(q,p);while(q.rear!=q.front) DeQueue(q,p); coutdata; if(p-lchild!=NULL) EnQueue(q,p-lchild); if(p-rchild!=NULL) EnQueue(q,p-

10、rchild);int leaf(BiTree T) /求二叉树的叶子数 if (T=NULL) return 0; else if (T-lchild=NULL&T-rchild=NULL) return 1; else return leaf(T-lchild)+leaf(T-rchild); void menu(void) /主菜单 system(cls); coutnn; coutttt 二叉树的简单应用n; coutttt*n; coutttt* *n; coutttt* 1 建 树 *n; coutttt* 2 层 次 遍 历 *n; coutttt* 3 先 序 遍 历 *n;

11、coutttt* 4 中 序 遍 历 *n; coutttt* 5 后 序 遍 历 *n; coutttt* 6 求 叶 子 数 *n; coutttt* 7 退 出 *n; coutttt* *n; coutttt*n; couti; switch(i) case 1: cout请输入建立二叉链表的序列:n; CreateBiTree(tree); coutendl; break; case 2: cout所建立的二叉链表先序序列:n; PreOrderTraverse(tree); coutendl; break; case 3: cout所建立的二叉链表中序序列:n; InOrderTr

12、averse(tree); coutendl; break; case 4: cout所建立的二叉链表层序遍历:n; lev_traverse(tree); coutendl; break; case 5: cout所建立的二叉链表后序序列:n; PostOrderTraverse(tree); coutendl; break; case 6: cout所建立的二叉链表的叶子数为:n; m=leaf(tree); coutm; coutendl; case 7: exit(0);break; default: cout输入错误,请输入(1-7):n;break; cout按回车键继续.n; g

13、etchar(); getchar(); 七、测试情况八、设计体会通过这次课程设计,我进一步地了解了二叉树的算法思想,熟悉了递归运算的方法,以及如何提高c+编程的性能等等,初步掌握了建立二叉树并进行二叉树基本运算的方法和技术,通过动手操作,使我对理论的学习掌握得更好。课程设计的过程,让我收获很多,从理论到实践,让我学到很多很多的东西,不仅可以巩固学过的知识,而且拓展了自己的知识面。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,但坚持下去不断努力,总能有所收获。参 考 文 献1 严蔚敏,李冬梅等.数据结构实验教程(C语言版).北京:人民邮电出版社,2010.

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

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