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

    2022年实验树和二叉树操作.docx

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

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

    2022年实验树和二叉树操作.docx

    精品学习资源试验四树和二叉树的操作一、试验题目:用菜单驱动的手法,编写一个完整的程序,生成一棵二叉树, 求二叉树的高度,求二叉树的叶子结点数,输出二叉树的全部结点;二、试验算法描述 :二叉树的生成是指如何在内存中建立二叉树的储备结构;建立次序储备结构的问题较简洁,这里仅争论如何建立二叉链表;要建立二叉链表,就需要依据某种方式输人二叉树的结点及其规律信息;留意到对二叉树遍历时,不仅得到了结点信息,而且由序列中结点的先后关系仍可获得肯定的规律信息,假如这些信息足够,就可依据遍历序列生成相应的二叉树二叉树的生成方法就是基于遍历序列的,相当于遍历问题的逆问题,即由遍历序列反求二叉树,这需要分析和利用二叉树遍历序列的特点;在以下两种方法中任选一种;* 以下的 <一) <二)要编写在一个完整的程序中;假如你不能编在一个程序中,就可以用两个完整的程序来实现;<一)用先根序列建立二叉树二叉树的结点就按相应的遍历过程逐个生成;类似层次遍历,假如不对遍历序列作些补充,是不能完整反映结点间的规律关系的,也就不能得到正确的结果;补充的方法也是增加虚结点,但这里只需对空指针对应的位置进行补 充,而不必补充到完全二叉树的形式;以先根遍历上图为例,二叉树的先根输入序列为:ABD G CE FH其中表示虚结点,这里不需要终止符;算法过程为,先生成根结点,再生成左子树,然后是右子树,左右子树的生成采纳递归;在详细作本试验时, 仍需编写一个主函数调用这个函数来生成二叉树, 最终输出二叉树的结点序列;<二)按完全二叉树的层次次序,依次输入结点信息来建立二叉链表这是由于完全三叉树的层次遍历序列中,结点间的序号关系可反映父子关系即规律关系;对一般的二又树,要补充如干个虚结点使其成为完全二叉树后,冉按其层次次序输入;例如,仅含 3个结点A、B、C的右单支树 <见下图2),按完全二叉树的形式输入的结点序列为:AB C,其中表示虚结点,表示输入终止;算法的基本思想是: 依次输入结点信息,如输入的结点不是虚结点,就建立一个新结点:如新结点是第 1个结点,就令其为根结点;否就将新结点作为孩子链接到它的双亲结点上;如此重复下去,直至输入字符“”为止;这里的关键是新结点与其双亲的链接;由于是按层次自左至右输入结点的,所以先输入的结点,其孩子也必定较先输入;即结点与其孩子具有先进先出的特点,于是可设置一个队列,储存已输人结点的地址;这样,队尾是当前正输入的结点,队头是其双亲结点;当队头结点的两个孩子都输入完毕后,出队,新的队头是下一个要输入孩子的双亲结点;如此下去,直到输入终止符为止;双亲与孩子的链接方法是:如当前输入的结点编号是偶数,就该结点作为欢迎下载精品学习资源左孩子与其双亲链接;否就作为右孩子与其双亲链;如双亲结点或孩子结点为虚结点,就无需链接;试验程序如下:#include<stdio.h> #include<malloc.h> #include<stdlib.h> #include<string.h>int cmpconst void *a,const void *b>return *int *>a-*int *>b;typedef char datatype;typedef struct treenodedatatype data ;struct treenode *leftchild,*rightchild;treenode,*bitree ;treenode *t ;int count=0 ;/建立二叉树方法 1treenode *creattree_1>treenode *t,*p,*v100;int i,j ;datatype e;t=NULL ;printf"n 请输入初始二叉树各结点的编号和对应的值<如1,a) :"> ;scanf"%d,%c",&i,&e>;whilei.=0&&e.='#'> p=treenode *>mallocsizeoftreenode>>;p->data=e;p->leftchild=NULL;p->rightchild=NULL;vi=p ;ifi=1>t=p ;else j=i/2 ;ifi%2=0>vj->leftchild=p;elsevj->rightchild=p;欢迎下载精品学习资源printf"n 请连续输入 <以0, #终止) :"> ;scanf"%d,%c",&i,&e>;return t> ;/建立二叉树方法 2 treenode *creattree_2>treenode *t ;datatype e;scanf"%c",&e> ;ife='#'>t=NULL ;else t=treenode *>mallocsizeoftreenode>>;t->data=e;t->leftchild=creattree_2> ;t->rightchild=creattree_2> ;return t> ;/先序遍历输出二叉树 void preordertreenode *p>ifp> printf"%-4c",p->data>;preorderp->leftchild> ;preorderp->rightchild> ;/中序遍历输出二叉树void inordertreenode *p> ifp>inorderp->leftchild> ;printf"%-4c",p->data> ;inorderp->rightchild>;/后序遍历输出二叉树 void postordertreenode *p>ifp>欢迎下载精品学习资源postorderp->leftchild> ;postorderp->rightchild> ;printf"%-4c",p->data> ;/运算二叉树高度int treedepthbitree bt>int lefthight,righthight,max;ifbt.=NULL> lefthight=treedepthbt->leftchild>;righthight=treedepthbt->rightchild>;max=lefthight>righthight>.lefthight:righthight;returnmax+1> ;elsereturn 0> ;/逆时针旋转 90度输出二叉树void printtreebitree bt,int level> int j ;ifbt>printtreebt->rightchild,level+1>;forj=0 ;j<=6*level ;j+>printf" "> ;printf"%cn",bt->data>;printtreebt->leftchild,level+1>;/交换二叉树左右子树void exchangebitree bt> bitree p ;ifbt>p=bt->leftchild ;bt->leftchild=bt->rightchild;bt->rightchild=p ;exchangebt->leftchild> ;exchangebt->rightchild> ;欢迎下载精品学习资源/运算叶结点数int leafcountbitree bt> ifbt.=NULL>leafcountbt->leftchild>;leafcountbt->rightchild>;ifbt->leftchild=NULL>&&bt->rightchild=NULL>>count+;return count> ;/输出叶结点void paintleafbitree bt> ifbt.=NULL>ifbt->leftchild=NULL&&bt->rightchild=NULL>printf"%-4c",bt->data>;paintleafbt->leftchild>;paintleafbt->rightchild>;/哈夫曼树 int haffman>int a100,b100 ;int i,j=0,k,n ;memseta,0,100>;memsetb,0,100>;printf" 请输入构造哈夫曼树的元素个数<正整数): "> ;scanf"%d",&n> ;printf"n"> ;printf" 请依次输入各元素权值<以空格间隔,按 ENTER 键终止): n"> ;fori=0 ;i<n ; i+>scanf"%d",&ai>;printf"n"> ;getchar>;printf" 构造哈夫曼树过程: nn"> ;fori=0 ;i<n ; i+>qsorta,n,sizeofa0>,cmp>;printf" 步骤 <%d) ",i+1> ;欢迎下载精品学习资源fork=i ; k<n; k+>printf"%d ",ak>;printf"nn"> ;bj+=ai ;bj+=ai+1;ai+1=ai+ai+1;printf" 当前哈夫曼树的全部结点权值为:n"> ;fori=0 ;i<j-1 ;i+>printf"%-5d",bi>;printf"nn"> ;int main>int command ;char order;doprintf"=简洁二叉树操作菜单 =n">;printf"*1.建立二叉树 <依据完全二叉树)*n"> ;printf"*2.建立二叉树 <仿照先序递归遍历)*n"> ;printf"*3.先序递归遍历二叉树*n"> ;printf"*4.中序递归遍历二叉树*n"> ;printf"*5.后序递归遍历二叉树*n"> ;printf"*6.输出二叉树的高度*n"> ;printf"*7.输出二叉树的叶结点*n"> ;printf"*8.交换二叉树的左右子树*n"> ;printf"*9.打印二叉树*n"> ;printf"*10.哈夫曼树 <最优二叉树)*n"> ;printf"*0.退出*n"> ;printf"=nn">;printf" 请输入指令 <0,1,2,3,4,5,6,7,8,9,10 ) :"> ;scanf"%d",&command> ;ifcommand<0|command>10>欢迎下载精品学习资源system"cls"> ;switchcommand>getchar>;printf"n 指令输入错误!请重新输入!n"> ;欢迎下载精品学习资源case 1:getchar>;system"cls"> ;printf" 如已构建二叉树,此操作将会清除当前二叉树,连续/退出 Y/N:"> ;scanf"%c",&order>;iforder='Y'|order='y'>欢迎下载精品学习资源t=creattree_1>;ift>printf"n"> ;elseprintf"n 当前二叉树为 <逆时针旋转 90度): n"> ;printtreet,0> ;printf"n 当前二叉树为空!请先建立二叉树!n"> ;欢迎下载精品学习资源getchar>;break;elsebreak;case 2: getchar>;system"cls"> ;printf" 如已构建二叉树,此操作将会清除当前二叉树,连续/退出 Y/N:"> ;scanf"%c",&order>;iforder='Y'|order='y'>printf"n 请输入二叉树按先序递归遍历各结点的值<虚结点以 #代替) :n"> ;fflushstdin> ;t=creattree_2> ;ift>printf"n 当前二叉树为 <逆时针旋转 90度): n"> ;printtreet,0> ;printf"n"> ;elseprintf"n 当前二叉树为空!请先建立二叉树!n"> ;欢迎下载精品学习资源getchar>;break;else欢迎下载精品学习资源case 3: getchar>;system"cls"> ;ift>break;欢迎下载精品学习资源printf"n 当前二叉树为 <逆时针旋转 90度): n"> ;printtreet,0> ;欢迎下载精品学习资源printf"n"> ;preordert> ;printf"n"> ;printf"n 先序递归遍历序列为 :n"> ;欢迎下载精品学习资源elseprintf"n 二叉树为空!请先建立二叉树!n"> ;break;欢迎下载精品学习资源case 4: getchar>;system"cls"> ;ift>欢迎下载精品学习资源printf"n 当前二叉树为 <逆时针旋转 90度): n"> ;printtreet,0> ;欢迎下载精品学习资源printf"n"> ;inordert> ;printf"n"> ;printf"n 中序递归遍历序列为 :n"> ;欢迎下载精品学习资源elseprintf"n 二叉树为空!请先建立二叉树!n"> ;break;欢迎下载精品学习资源欢迎下载精品学习资源case 5: getchar>;system"cls"> ;ift>欢迎下载精品学习资源printf"n 当前二叉树为 <逆时针旋转 90度): n"> ;printtreet,0> ;欢迎下载精品学习资源printf"n"> ;printf"n 后序递归遍历序列为 :n"> ;postordert> ;printf"n"> ;欢迎下载精品学习资源elseprintf"n 二叉树为空!请先建立二叉树!n"> ;break;欢迎下载精品学习资源system"cls"> ;case 6: getchar>;ift>欢迎下载精品学习资源printf"n"> ;printf"n 当前二叉树为 <逆时针旋转 90度): n"> ;printtreet,0> ;欢迎下载精品学习资源printf" 当前二叉树的高度为 :%dn",treedeptht>> ;欢迎下载精品学习资源elsebreak;printf"n 二叉树为空!请先建立二叉树!n"> ;欢迎下载精品学习资源欢迎下载精品学习资源system"cls"> ;case 7: getchar>;ift>欢迎下载精品学习资源printf"n"> ;printf"n 当前二叉树为 <逆时针旋转 90度): n"> ;printtreet,0> ;printf" 当前二叉树的叶子结点数为:%dnn",leafcountt>> ;printf" 当前二叉树的叶子结点依次为:n"> ;欢迎下载精品学习资源欢迎下载精品学习资源elsebreak;case 8:paintleaft> ;printf"n"> ;printf"n 二叉树为空!请先建立二叉树!n"> ;欢迎下载精品学习资源system"cls"> ;getchar>;ift>欢迎下载精品学习资源printf"n"> ;elsebreak;case 9:printf"n 当前二叉树为 <逆时针旋转 90度): n"> ;printtreet,0> ;exchanget>;printf"n 交换后的二叉树为 :n"> ;printtreet,0> ;printf"n"> ;printf"n 二叉树不存在!请先建立二叉树!n"> ;欢迎下载精品学习资源system"cls"> ;elsegetchar>;ift>printf"n 当前二叉树为 <逆时针旋转 90度): n"> ;printtreet,0> ;printf"n"> ;欢迎下载精品学习资源printf"n 二叉树不存在!请先建立二叉树!n"> ;break;case 10:getchar>;system"cls"> ;printf"=哈夫曼树的建立与输出=nn">;欢迎下载精品学习资源haffman> ;break;ifcommand=0>getchar>;system"cls"> ;printf" 再见! nn"> ;break;printf"n 请按 ENTER 键返回主菜单 .n"> ;getchar> ;system"cls"> ;whilecommand>=1&&command<=10>;欢迎下载精品学习资源欢迎下载精品学习资源欢迎下载精品学习资源欢迎下载精品学习资源欢迎下载精品学习资源欢迎下载

    注意事项

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

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




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

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

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

    收起
    展开