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

开通VIP
 

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

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

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(数据结构二叉树作业.doc)为本站上传会员【精****】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

数据结构二叉树作业.doc

1、个人收集整理 勿做商业用途 1. 实验目的: 通过上机实验进一步掌握栈、队列、二叉树的存储结构及基本操作的实现方法. 2. 实验内容与要求: 基于二叉链表存储结构实现二叉树的基本运算,要求: ⑴能建立非空二叉树; ⑵实现二叉树的先、中、后序递归遍历算法; ⑶实现二叉树的非递归的先(或中、或后)序遍历算法及层序遍历算法; ⑷记录运行结果并对递归算法和非递归算法的效率加以分析。 3. 数据结构设计: 逻辑结构:树形结构 存储结构:链式存储结构 4. 算法设计: #include 〈stdio.h> #include #define OK 1

2、 #define ERROR 0 //使用二叉链表存储形式 typedef struct BiTNode { char data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; //这里是将指向节点的指针放到栈里,而通过调试是 //可以看到指针指向的值的,所以不是将树放进去了 typedef struct { BiTree *base; BiTree *top; int stacksize; }SqStack; typedef struct { BiTree *base; int fron

3、t; int rear; }SqQueue; int InitStack(SqStack &S) { S.base = (BiTree *)malloc(100*sizeof(BiTree)); if( !S。base) exit(2); S.top = S.base; S.stacksize = 100; return OK; } int GetTop(SqStack S,BiTree &e) { if(S。top == S.base ) return ERROR; e = *(S。top—1); return OK; }

4、 int PUSH(SqStack &S ,BiTree e) { if(S。top—S。base 〉= S.stacksize) { S.base = (BiTree *)realloc(S.base,(S。stacksize + 10)*sizeof(BiTree) ); if(!S。base) exit(2); S.top = S。base + S。stacksize; S.stacksize = S.stacksize+10; } *S.top++ = e; return OK; } int POP(SqStack &

5、S,BiTree &e) { if(S.top == S.base) return ERROR; e = *—-S。top; return OK; } int StackEmpty(SqStack S) { if (S。base == NULL) return ERROR; if (S。base == S。top) return OK; return ERROR; } //队列的东西伤不起啊 int InitQueue(SqQueue &Q) { Q.base = (BiTree *)malloc(

6、100*sizeof(BiTree)); if(!Q.base) exit(2); Q。front=Q。rear = 0; return OK; } int EnQueue(SqQueue &Q,BiTree e) { if( (Q。rear+1) % 100 == Q。front) return ERROR; Q。base[Q。rear] = e; Q.rear = ( Q。rear+1 ) % 100; return OK; } int DeQueue(SqQueue &Q,BiTree &e) { if(Q。front ==

7、 Q.rear) return ERROR; e = Q.base[Q.front]; Q。front = (Q.front+1) % 100; return OK; } int QueueEmpty(SqQueue Q) { if (Q。base == NULL) return ERROR; if (Q.front == Q.rear) return OK; return ERROR; } BiTree CreateBiTree(BiTree &T) { // 算法6。4 // 按先序次序输入二叉树中结

8、点的值(一个字符),空格字符表示空树, // 构造二叉链表表示的二叉树T。 char ch; scanf(”%c",&ch); //这里表明了输入形式是ABCDE##FG然后是回车 if (ch==’#’) T = NULL; else { if (!(T = (BiTNode *)malloc(sizeof(BiTNode)))) return ERROR; T—>data = ch; // 生成根结点 CreateBiTree(T-〉lchild); // 构造左子树 CreateBiTre

9、e(T->rchild); // 构造右子树 } return T; } // CreateBiTree int PrintElement(char e) { // 输出元素e的值 printf("%c",e); return OK; } int PreOrderTraverse( BiTree T, int(*Visit)(char) ) { // 算法6.1 // 采用二叉链表存储结构,Visit是对数据元素操作的应用函数, // 先序遍历二叉树T的递归算法,对每个数据元素调用函数Visit。 // 调用实

10、例:PreOrderTraverse(T, PrintElement); if(T) { if (Visit(T—〉data)) if (PreOrderTraverse(T—>lchild, Visit)) if (PreOrderTraverse(T-〉rchild, Visit)) return OK; printf("\n"); return ERROR; } else return OK; } // PreOrderTraverse //和前面一样的,不解释 int

11、InOrderTraverse2( BiTree T, int(*Visit)(char) ) { if(T) { if (InOrderTraverse2(T—〉lchild, Visit)) if (Visit(T—>data)) if (InOrderTraverse2(T—〉rchild, Visit)) return OK; printf(”\n"); return ERROR; } else return OK; } int PostOrderTraverse

12、 BiTree T, int(*Visit)(char) ) { if(T) { if (PostOrderTraverse(T—>lchild, Visit)) if (PostOrderTraverse(T—>rchild, Visit)) if (Visit(T-〉data)) return OK; printf(”\n”); return ERROR; } else return OK; } int InOrderTraverse(BiTree T, int

13、 (*Visit)(char)) { // 算法6.2 // 采用二叉链表存储结构,Visit是对数据元素操作的应用函数。 // 中序遍历二叉树T的非递归算法,对每个数据元素调用函数Visit。 int InitStack(SqStack &S); int GetTop(SqStack S,BiTree &e); int PUSH(SqStack &S ,BiTree e); int POP(SqStack &S,BiTree &e); int StackEmpty(SqStack S) ; SqStack S; BiTree p;

14、 if(!T) return ERROR; InitStack(S); PUSH(S,T); // 根指针进栈 while (!StackEmpty(S)) { while (GetTop(S, p) && p) PUSH(S, p->lchild); // 向左走到尽头 POP(S, p); // 空指针退栈 if (!StackEmpty(S)) { // 访问结点,向右一步 POP(S, p); if (!Visit(p—〉data)) return

15、 ERROR; PUSH(S, p—〉rchild); } } return OK; } // InOrderTraverse //层序遍历法 int LevelOrderTraverse(BiTree T, int (*Visit)(char)) { int InitQueue(SqQueue &Q); int EnQueue(SqQueue &Q,BiTree e); int DeQueue(SqQueue &Q,BiTree &e); int QueueEmpty(SqQueue Q); SqQueue Q; BiTree

16、 p; if(!T) return ERROR; InitQueue(Q); EnQueue(Q,T); //先入队 while(!QueueEmpty(Q))//判空,如果是刚开始的话肯定不空直到遍历完 { DeQueue(Q,p);//先出队 if(!Visit(p—〉data)) //访问 return ERROR; if(p-〉lchild) //左孩子入队(如果有) EnQueue(Q,p-〉lchild); if(p—>rchild) //右孩子入队(如果有) EnQueue(Q,p-〉rchild

17、 } return OK; } int main() { LARGE_INTEGER litmp; LONGLONG QPart1,QPart2; double dfMinus,dfFreq,dfTim; BiTree CreateBiTree(BiTree &T); int PrintElement(char e); BiTNode *T; printf("请输入二叉树,空节点为\”#\”\n"); printf(”例如:a#bc#d###\n”); CreateBiTree(T); printf(”前序遍

18、历二叉树的结果为:\n"); PreOrderTraverse(T,PrintElement); printf("\n”); QueryPerformanceFrequency(&litmp); dfFreq = (double)litmp.QuadPart; QueryPerformanceCounter(&litmp); QPart1 = litmp。QuadPart; printf(”中序遍历二叉树的结果为:\n"); InOrderTraverse2(T,PrintElement); printf(”\n"); QueryPerforma

19、nceCounter(&litmp); QPart2 = litmp。QuadPart; dfMinus = (double)(QPart2—QPart1); dfTim = dfMinus / dfFreq; printf(”中序遍历(递归)使用时间为%lf毫秒\n”,dfTim); printf(”后序遍历二叉树的结果为:\n"); PostOrderTraverse(T,PrintElement); printf(”\n"); printf("层序遍历二叉树的结果为:\n"); LevelOrderTraverse(T,PrintEleme

20、nt); printf("\n”); QueryPerformanceFrequency(&litmp); dfFreq = (double)litmp。QuadPart; QueryPerformanceCounter(&litmp); QPart1 = litmp.QuadPart; printf("中序遍历二叉树(非递归)的结果为:\n”); InOrderTraverse(T,PrintElement); printf("\n”); QueryPerformanceCounter(&litmp); QPart2 = litmp.QuadPart; dfMinus = (double)(QPart2-QPart1); dfTim = dfMinus / dfFreq; printf("中序遍历(非递归)使用时间为%lf毫秒\n”,dfTim); system("pause"); return OK; } 5. 实验结果:

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服