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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(完整word版树形数据结构及其应用word文档良心出品.docx)为本站会员(b****8)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

完整word版树形数据结构及其应用word文档良心出品.docx

1、完整word版树形数据结构及其应用word文档良心出品淮海工学院计算机工程学院实验报告书课程名: 数 据 结 构 题 目: 树形数据结构及其应用 班 级: 学 号: 姓 名: 实验2 树形数据结构实验目的和要求1熟练掌握二叉树的二叉链表存储结构;二叉树的常用遍历方法:按层遍历、先序递归遍历、中序递归和非递归遍历、后序递归遍历。2掌握按先序遍历顺序输入数据,递归建立二叉树的方法。3. 掌握建立哈夫曼树的方法,实现哈夫曼编码。实验环境 Turbo C 或VC+实验学时 4学时,必做实验实验题目1. 问题描述 建立一棵用二叉链表方式存储的二叉树,并对其进行遍历(先序、中序和后序),打印输出遍历结果。

2、基本要求 从键盘接受输入先序序列,以二叉链表作为存储结构,建立二叉树(以先序来建立)并对其进行遍历(先序、中序、后序),然后将遍历结果打印输出。要求采用递归和非递归两种方法实现。测试数据 ABCDEGF(其中表示空格字符) 输出结果为: 先序:ABCDEGF 中序:CBEGDFA 后序:CGBFDBA2已知二叉树按照二叉链表方式存储,编写算法,要求实现二叉树的竖向显示(竖向显示就是二叉树的按层显示)。提示:(1)参习题6.20,实现逐层遍历(2)队中保存每个结点的打印位置,其左、右子的距离3如题1要求建立好二叉树,按凹入表形式打印二叉树结构,如图6.34所示。A B C D E图6.34 F

3、主要数据结构1.typedef char DataType;typedef struct Node DataType data; struct Node *LChild; struct Node *RChild;BiTNode, *BiTree;2.ypedef BiTree QueueElementType;typedef struct QueueElementType elementMAXSIZE; /* 队列的元素空间*/ int front; /*头指针指示器*/ int rear; /*尾指针指示器*/SeqQueue;3.void InitQueue(SeqQueue *Q)/*初

4、始化操作*/4.int EnterQueue(SeqQueue *Q, QueueElementType x)/*入队操作*/5.int DeleteQueue(SeqQueue *Q, QueueElementType *x)/*出队操作*/6.int LayerOrder(BiTree bt)7.InitQueue(Q); /*初始化空队列Q*/8.void CreateBiTree(BiTree *bt)9.void PreOrder(BiTree root)/先序遍历二叉树10.void InOrder(BiTree root)/中序遍历二叉树11.void PostOrder(BiT

5、ree root)/后序遍历二叉树12.int CreateBiTree(BiTree &T) /创建一棵非空二叉树13.void PrintTree(BiTree Boot,int nLayer) /* 打印二叉树 */主要算法1.用递归和非递归进行遍历(先序、中序、后序)2.按图进行遍历3.用队列编写二叉链表存储:初始化、入队、出队运行结果1.递归非递归2.3.实验体会1.代码可能有点冗长,对后序线索二叉树求后继节点实现的不是很好。2.这次任务量有点大,实现的函数太多,全部放在一个文件里不利于维护与修改。附源代码1.递归:#include #include #include typedef

6、 char DataType;typedef struct Node DataType data; struct Node *LChild; struct Node *RChild;BiTNode, *BiTree;void CreateBiTree(BiTree *bt) char ch; ch=getchar(); if(ch= ) *bt=NULL; else *bt=(BiTree)malloc(sizeof(BiTNode); (*bt)-data=ch; CreateBiTree(&(*bt)-LChild); CreateBiTree(&(*bt)-RChild); void V

7、isit(char ch) printf(%c ,ch);void PreOrder(BiTree root)/先序遍历二叉树 if(root!=NULL) Visit(root-data); PreOrder(root-LChild); PreOrder(root-RChild); void InOrder(BiTree root)/中序遍历二叉树 if(root!=NULL) InOrder(root-LChild); Visit(root-data); InOrder(root-RChild); void PostOrder(BiTree root)/后序遍历二叉树 if(root!=N

8、ULL) PostOrder(root-LChild); PostOrder(root-RChild); Visit(root-data); void main() BiTree T; CreateBiTree(&T); printf(先序遍历序列为:); PreOrder(T); printf(n中序遍历序列为:); InOrder(T); printf(n后序遍历序列为:); PostOrder(T); getch();非递归:#include using namespace std;#define OK 1#define ERROR 0#define OVERFLOW -2typedef

9、 int SElemType;typedef struct Node char data; struct Node *LChild; struct Node *RChild;BiTNode,*BiTree; typedef struct BiTNode *a100; int top;Sqstack;void push(Sqstack *s,BiTNode *x) if (s-top=100) coutstack overflow!top+; s-as-top=x; BiTNode *pop(Sqstack *s,BiTNode *x) if (s-top=0) coutstack underf

10、low!as-top; s-top-; return (x); int CreateBiTree(BiTree &T) /创建一棵非空二叉树 char ch; cinch; if(ch=.) T=NULL; else if(!(T=(BiTNode*)malloc(sizeof(BiTNode) exit(OVERFLOW); T-data=ch; CreateBiTree(T-LChild); CreateBiTree(T-RChild); return OK; void Preorder(BiTree T) /先序递归操作遍历二叉树 if(T) coutdataLChild); Preor

11、der(T-RChild); void Inorder(BiTree T) /中序非递归操作遍历二叉树 Sqstack s; BiTNode *p; s.top=0; push(&s,T); while (s.top!=0) while (s.as.top!=NULL) p=s.as.top; push(&s,p-LChild); p=pop(&s,T); if(s.top!=0) p=pop(&s,T); coutdataRChild); void Postorder(BiTree T) /后序非递归操作遍历二叉树 if(T) Postorder(T-LChild); Postorder(T

12、-RChild); coutdata ; void main() BiTree T; cout 输入要创建树的顺序:; CreateBiTree(T); cout先序遍历的结果:; Preorder(T); coutn; cout中序遍历的结果:; Inorder(T); coutn; cout后序遍历的结果:; Postorder(T); coutn; 2.typedef struct Node DataType data;struct Node *LChild;struct Node *RChild; BiTNode, *BiTree;按照右根左方式遍历孩子兄弟表示树,然后先根遍历。#in

13、clude stdio.h#include #include #define TRUE 1#define FALSE 0#define ERROR 0#define OK 1#define MAXSIZE 50 /*队列的最大长度*/Typedef char DataTpyetypedef struct Node DataType data; struct Node *LChild; struct Node *RChild;BiTNode, *BiTree;typedef BiTree QueueElementType;typedef struct QueueElementType eleme

14、ntMAXSIZE; /* 队列的元素空间*/ int front; /*头指针指示器*/ int rear; /*尾指针指示器*/SeqQueue;/*初始化操作*/void InitQueue(SeqQueue *Q) /* 将*Q初始化为一个空的循环队列 */ Q-front=Q-rear=0;/*入队操作*/int EnterQueue(SeqQueue *Q, QueueElementType x) /*将元素x入队*/ if(Q-rear+1)%MAXSIZE=Q-front) /*队列已经满了*/ return(FALSE); Q-elementQ-rear=x; Q-rear=

15、(Q-rear+1)%MAXSIZE; /* 重新设置队尾指针 */ return(TRUE); /*操作成功*/*出队操作*/int DeleteQueue(SeqQueue *Q, QueueElementType *x) /*删除队列的队头元素,用x返回其值*/ if(Q-front=Q-rear) /*队列为空*/ return(FALSE); *x=Q-elementQ-front; Q-front=(Q-front+1)%MAXSIZE; /*重新设置队头指针*/ return(TRUE); /*操作成功*/int IsEmpty(SeqQueue *Q) /*提取队列的队头元素,

16、用x返回其值*/ if(Q-front=Q-rear) /*队列为空*/ return(TRUE); else return(FALSE); /*操作成功*/int LayerOrder(BiTree bt) SeqQueue *Q; BiTree p; Q=(SeqQueue *)malloc(sizeof(SeqQueue); /p=(BiTree *)malloc(sizeof(BiTree); InitQueue(Q); /*初始化空队列Q*/ if(bt = NULL) return ERROR; /* 若二叉树bt为空树,则结束遍历*/ EnterQueue(Q, bt);/* 若

17、二叉树bt非空,则根结点bt入队,开始层次遍历*/ while(!IsEmpty(Q)/*若队列非空,则遍历为结束,继续进行*/ DeleteQueue(Q, &p);/*队头元素出队并访问 */ printf(%c ,p-data); if(p-LChild ) EnterQueue(Q, p-LChild);/*若p的左孩子非空,则进队*/ if(p-RChild ) EnterQueue(Q, p-RChild); /*若p的右孩子非空,则进队*/ /*while*/ return OK;/* LayerOrder */void main() BiTree T; printf(按扩展先序

18、遍历序列建立二叉树,请输入序列:n); CreateBiTree(&T); printf(层次遍历输出结点为:); LayerOrder(T); getch();3.#include#include#includetypedef char DataType;typedef struct Node DataType data; struct Node *LChild; struct Node *RChild;BiTNode, *BiTree;void CreateBiTree(BiTree *bt) char ch; ch=getchar(); if(ch= ) *bt=NULL; else *

19、bt=(BiTree)malloc(sizeof(BiTNode); (*bt)-data=ch; CreateBiTree(&(*bt)-LChild); CreateBiTree(&(*bt)-RChild); void Visit(char ch) printf(%c,ch);void PreOrder(BiTree root) if(root!=NULL) Visit(root-data); PreOrder(root-LChild); PreOrder(root-RChild); void InOrder(BiTree root) if(root!=NULL) InOrder(roo

20、t-LChild); Visit(root-data); InOrder(root-RChild); void PostOrder(BiTree root) if(root!=NULL) PostOrder(root-LChild); PostOrder(root-RChild); Visit(root-data); void PrintTree(BiTree Boot,int nLayer) if(Boot=NULL) return; PrintTree(Boot-RChild,nLayer+1); for(int i=0;idata); PrintTree(Boot-LChild,nLayer+1);void main() BiTree T; CreateBiTree(&T); printf(先序遍历序列为:); PreOrder(T); printf(n中序遍历序列为:); InOrder(T); printf(n后序遍历序列为:); PostOrder(T); printf(n); PrintTree(T,0); getch();

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2