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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构二叉树遍历实验报告Word文件下载.docx

1、InitStack&S 操作结果:构造一个空栈StackEmpty( S )初始条件:栈S已存在。假设S为空栈,那么返回OK,否那么返回ERROR。 Push( &S, e )初始条件: 操作结果:插入元素e为新的栈顶元素。 Pop( &S, &e )初始条件:栈S已存在且非空。删除S的栈顶元素,并用e返回其值。GetTop( S, &用e返回S的栈顶元素。2.二叉树的抽象数据类型ADT BinaryTree 数据对象D:D是具有一样特性的数据元素的集合。 数据关系R: 假设D=,那么R=,称BinaryTree为空二叉树; 假设D,那么R=H,H是如下二元关系; 1在D中存在惟一的称为根的数

2、据元素root,它在关系H下无前驱; 2假设D-root,那么存在D-root=D1,Dr,且D1Dr =; 3假设D1,那么D1中存在惟一的元素x1,H,且存在D1上的关系H1 H;假设Dr,那么Dr中存在惟一的元素xr,H,且存在上的关系Hr H;H=,data=ch; if (CreateBiTree(T-lchild) T-LTag=Link;rchild) T-RTag=Link; return OK;b)先序递归遍历二叉数T,并输出全部结点值。void PreOrderTraverse_re(BiTree T,int (*print)(TElemType e) if(T) if(p

3、rint(T-data) PreOrderTraverse_re(T-lchild,print); PreOrderTraverse_re(T-rchild,print); return ;c)中序非递归遍历二叉树T,并输出全部结点值void InOrderTraverse(BiTree T,int (*print)(TElemType e) SqStack S; S.base=NULL;S.top=NULL; SElemType p=NULL; InitStack(S); Push(S,T); while(!StackEmpty(S) while(GetTop(S,p)&p) Push(S,

4、p-lchild); Pop(S,p); Pop(S,p); print(p-data);rchild); return;d)中序递归遍历二叉树T,并输出全部结点值void InOrderTraverse_re(BiTree T,int (*print)(TElemType e) if(T) InOrderTraverse_re(T- print(T- e)中序遍历二叉树T,并将其中序线索化,Thrt指向头结点 void InOrderThreading(BiThrTree &Thrt,BiThrTree T) Thrt=(BiThrTree)malloc(sizeof(BiThrNode);

5、 Thrt-/建头结点RTag=Thread;rchild=Thrt;/右指针回指 if(!lchild=Thrt; Thrt-lchild=T; pre=Thrt; InThreading(T);/中序遍历进展中序线索化 pre-/最后一个结点线索化rchild=pre; i=Thrt;/InOrderThreadingf)结点p线索化void InThreading(BiThrTree p) if (p) InThreading(p- / 左子树线索化 if (!p-lchild) / 建前驱线索 p-LTag = Thread; p-lchild = pre;pre-rchild) /

6、建后继线索 pre-RTag = Thread; pre-rchild = p; pre = p; / 保持pre指向p的前驱 / 右子树线索化 / InThreadingg)/中序遍历线索化二叉树int InOrderTraverse_Thr(BiThrTree T, int (*print)(TElemType e) BiThrTree p=NULL; p=T-lchild; while(p!=T) while(p-LTag=Link) p=p-print(p-RTag=Thread &rchild!rchild; p=p-4.栈typedef struct SElemType *base

7、; SElemType *top; int stacksize;SqStack;a)创立一个空栈S) S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType); S.top=S.base; /初始为空 S.stacksize=STACK_INIT_SIZE;b)栈顶插入元素e) if(S.top-S.base=S.stacksize) S.base=(SElemType*)realloc(S.base,(STACK_INIT_SIZE+STACKINCREMENT)*sizeof(SElemType); S.top=S.base+S

8、.stacksize; S.stacksize+=STACKINCREMENT; *S.top+=e;c)栈顶删除元素 if(S.top=S.base) return; e=*-S.top;d)判断栈是否为空栈int StackEmpty(SqStack S) return OK; return ERROR;e)e返回S的栈顶元素 e=*(S.top-1);5.主函数int flag; BiTree T; BiThrTree Thrt; printf(*n);* 实验12 二叉树的遍历 *n* 1. 实现二叉树的不同遍历算法和二叉树的中序线索化算法 *n* a) 中序递归遍历算法; *n* b

9、) 先序递归遍历算法;* c) 中序遍历的非递归算法;* d) 先序或后序遍历非递归算法之一;* e) 建立中序线利用线索进展中序遍历和反中序遍历。* 2. 实现二叉树的按层遍历算法。*nn选择操作:nt1.先序与中序遍历算法nt2.中序线索的中序遍历和反中序遍历算法nt3.按层遍历算法n请选择:%dflag); switch(flag) case 1: printf(前序递归创立二叉树空格 表示此结点为空:n getchar(); CreateBiTree(T);中序递归遍历输出: InOrderTraverse_re(T,print);n前序递归遍历输出: PreOrderTraverse

10、_re(T,print);n中序非递归遍历输出: InOrderTraverse(T,print);n前序非递归遍历输出: PreOrderTraverse(T,print); break; case 2:n中序遍历线索化二叉树: InOrderThreading(Thrt , T); InOrderTraverse_Thr(Thrt , print); case 3:n按层遍历输出: Levelorder(T); default:return; 6.函数间调用关系mainInOrderTraverse_reCreateBitreePreOrderTraverse_reInOrderTrave

11、rsePreOrderTraverseInOrderThreadingInOrderTraverse_ThrThreadingStack操作调试分析1、二叉树的分层遍历,开场时想用队列来做,但考虑到比拟麻烦,因而改为数组模拟队列,简单易懂,课后可自行尝试用队列来做。2 在线索化二叉树时考虑到如果将两种存储构造分开将导致两个类型的指针不能互相传值,造成许多麻烦。比拟两种存储构造发现,线索二叉树比二叉树多了两个标志域LTag,Rtag。于是把两种存储构造合并为BiThrNode,并在建立二叉树时把LTag,Rtag均置为Link。程序正常运行。 3.进入演示程序BiTree.cpp,完成编译,连接

12、即按下Ctrl F5进入演示界面,或直接翻开执行文件BiTree.exe,产生如下列图所示的界面:1用户需根据用户提示信息操作,输入二叉树以空格表示空结点,输入完成后按回车键,屏幕上打印出对应于该二叉树的各种遍历结果。如下列图:六、测试结果输入:屏幕输出:中序递归遍历输出:a+b*c-d前序递归遍历输出:+a*b-cd中序非递归遍历输出:前序非递归遍历输出:按层遍历输出:中序遍历线索化二叉树:七、附录BiTree.cppBiTree.exe#includestdlib.h#define QElemType BiTNodetypedef enum PointerTagLink,Thread; /Link=0,指针,Thread=1,线索 /二叉树 SElemType *base; SElemType *top; int stacksize;/全局变量/*函数声明*/ /*二叉树的创立递归创立*/(T=(BiTNode *)mal

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

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