欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    实验六-二叉树实验报告(共7页).doc

    • 资源ID:14491646       资源大小:102.50KB        全文页数:7页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    实验六-二叉树实验报告(共7页).doc

    精选优质文档-倾情为你奉上实验四 二叉树的操作 班级:计算机1002班 姓名:唐自鸿 学号:7 完成日期:2010.6.14题目:对于给定的一二叉树,实现各种约定的遍历。一、实验目的: (1)掌握二叉树的定义和存储表示,学会建立一棵特定二叉树的方法;(2)掌握二叉树的遍历算法(先序、中序、后序遍历算法)的思想,并学会遍历算法的递归实现和非递归实现。二、实验内容:构造二叉树,再实现二叉树的先序、中序、后序遍历,最后统计二叉树的深度。三、实验步骤:(一) 需求分析1. 二叉树的建立首先要建立一个二叉链表的结构体,包含根节点和左右子树。因为树的每一个左右子树又是一颗二叉树,所以用递归的方法来建立其左右子树。二叉树的遍历是一种把二叉树的每一个节点访问并输出的过程,遍历时根结点与左右孩子的输出顺序构成了不同的遍历方法,这个过程需要按照不同的遍历的方法,先输出根结点还是先输出左右孩子,可以用选择语句来实现。2程序的执行命令为:1)构造结点类型,然后创建二叉树。2)根据提示,从键盘输入各个结点。3)通过选择一种方式(先序、中序或者后序)遍历。4)输出结果,结束。(二)概要设计1.二叉树的二叉链表结点存储类型定义 typedef struct Node DataType data; struct Node *LChild; struct Node *RChild;BitNode,*BitTree;2.建立如下图所示二叉树:void CreatBiTree(BitTree *bt)用扩展先序遍历序列创建二叉树,如果是当前树根置为空,否则申请一个新节点。 3.本程序包含四个模块 1) 主程序模块: 2)先序遍历模块 3)中序遍历模块 4)后序遍历模块4.模块调用关系: 主程序模块 先序遍历模块中序遍历模块后序遍历模块(三)详细设计1.建立二叉树存储类型/=构造二叉树=void CreatBiTree(BitTree *bt)/用扩展先序遍历序列创建二叉树,如果是当前树根置为空,否则申请一个新节点/ char ch; ch=getchar(); if(ch='.')*bt=NULL; else *bt=(BitTree)malloc(sizeof(BitNode);/申请一段关于该节点类型的存储空间 (*bt)->data=ch; /生成根结点 CreatBiTree(&(*bt)->LChild); /构造左子树 CreatBiTree(&(*bt)->RChild); /构造右子树 2. 编程实现以上二叉树的前序、中序和后序遍历操作,输出遍历序列 1)先序遍历二叉树的递归算法如下: void PreOrder(BitTree root) if (root!=NULL) Visit(root ->data); PreOrder(root ->LChild); /递归调用核心 PreOrder(root ->RChild); 2)中序遍历二叉树的递归算法如下: void InOrder(BitTree root) if (root!=NULL) InOrder(root ->LChild); Visit(root ->data); InOrder(root ->RChild); 3)后序遍历二叉树的递归算法如下: void PostOrder(BitTree root) if(root!=NULL) PostOrder(root ->LChild); PostOrder(root ->RChild); Visit(root ->data); 4)计算二叉树的深度算法如下: int PostTreeDepth(BitTree bt) /求二叉树的深度 int hl,hr,max; if(bt!=NULL) hl=PostTreeDepth(bt->LChild); /求左子树的深度 hr=PostTreeDepth(bt->RChild); /求右子树的深度 max=hl>hr?hl:hr; /得到左、右子树深度较大者 return(max+1); /返回树的深度 else return(0); /如果是空树,则返回0四、调试分析及测试结果1. 进入演示程序后的显示主界面: 请输入二叉树中的元素; 先序、中序和后序遍历分别输出结果。2.测试结果 以扩展先序遍历序列输入,其中.代表空子树:ABC.DE.G.F 先序遍历序列为:ABCDEGF 中序遍历序列为:CBEGDFA 后序遍历序列为:CGEFDBA 此二叉树的深度为:53.程序运行结果1)输入二叉树中的元素(以扩展先序遍历序列输入,其中.代表空子树),显示截图为: 图一2)输出结果,显示界面为: 图二4.调试分析: 本程序通过分别调用先序遍历、中序遍历以及后序遍历函数对二叉树中的元素进行遍历,整个程序基本满足实验要求,但是在一些细节问题上面还是存在缺陷,比如大小写字母不同也会导致程序无法运行,这就需要我们在处理问题上认真细致,还有就是程序并不是很完善,总之,我会在今后更加努力,是程序更完美。六、实验总结 1. 二叉树对于进行表达式的前缀,中缀和后缀的表示有明显的优势,既方便,又容易理解。其先序,中序和后序分别对应这表达式的前缀,中缀和后缀。2. 在建树与进行树的遍历的时候一定要理解其建树与遍历的整个过程。不然就会连为什么这样做都不知道。在遍历树的时候最常用到的就是栈的结构了(非递归)。3.本次实验让我更加了解了哈夫曼树的构造和生成方法,以及如何用顺序结构来存储哈夫曼树及构树过程的信息,如何进行编码、译码。也感知到模块程序设计在大程序设计使用中的普遍性,该实验是最好的证明,通过模块程序设计,能使程序可读可写性明显加强。通过本次实验,使我初步掌握了二叉树的结构特性以及各种存储的结构的特点和适用范围,掌握了哈夫曼树的定义和思想,初步掌握了用凹入法显示树。不过程序仍有树的显示不够完善的缺点,在今后的学习中,我会不断学习,在学习中注意改变。附录源程序清单:#include<stdio.h>#include<stdlib.h>#include <malloc.h>#include <conio.h>typedef int DataType;typedef struct Node /创建结点类型结构体 DataType data; struct Node *LChild; struct Node *RChild;BitNode,*BitTree;void CreatBiTree(BitTree *bt) /用扩展先序遍历序列创建二叉树,如果是当前树根置为空,否则申请一个新节点/ char ch; ch=getchar(); if(ch='.')*bt=NULL; else *bt=(BitTree)malloc(sizeof(BitNode); (*bt)->data=ch; CreatBiTree(&(*bt)->LChild); CreatBiTree(&(*bt)->RChild); void visit(char ch)/访问根节点 printf("%c",ch);void PreOrder(BitTree root) /先序遍历二叉树的递归算法 if (root!=NULL) Visit(root ->data); PreOrder(root ->LChild); PreOrder(root ->RChild); void InOrder(BitTree root) /中序遍历二叉树的递归算法 if (root!=NULL) InOrder(root ->LChild); Visit(root ->data); InOrder(root ->RChild); void PostOrder(BitTree root) /后序遍历求二叉树的递归算法 if(root!=NULL) PostOrder(root ->LChild); PostOrder(root ->RChild); Visit(root ->data); int PostTreeDepth(BitTree bt) /求二叉树的深度 int hl,hr,max; if(bt!=NULL) hl=PostTreeDepth(bt->LChild); /求左子树的深度 hr=PostTreeDepth(bt->RChild); /求右子树的深度 max=hl>hr?hl:hr; /得到左、右子树深度较大者 return(max+1); /返回树的深度 else return(0); /如果是空树,则返回0void main() BitTree T; int h; int layer; int treeleaf; layer=0; printf("请输入二叉树中的元素(以扩展先序遍历序列输入,其中.代表空子树):n"); CreatBiTree(&T); printf("先序遍历序列为:"); PreOrder(T); printf("n中序遍历序列为:"); InOrder(T); printf("n后序遍历序列为:"); PostOrder(T); h=PostTreeDepth(T); printf("n"); printf("此二叉树的深度为:%dn",h);专心-专注-专业

    注意事项

    本文(实验六-二叉树实验报告(共7页).doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开