




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数
据
結
构实验报告试验名称:二叉树的常見操作指导老師:金保华班级:计科02姓名:高延庆學号:07010208试验目的及规定1.掌握二叉树的存储实現。2.掌握二叉树的遍历思想。3.掌握二叉树的常見算法的程序实現。二、试验内容:1.输入字符序列,建立二叉链表。 2.中序遍历二叉树:递归算法。3.先序、中序、後序遍历二叉树:非递归算法。4.求二叉树的高度。5.求二叉树的叶子個数。6.借助队列实現二叉树的层次遍历。7.在主函数中设计一种简朴的菜單,分别调试上述算法。8.综合训练:為N個权值设计哈夫曼编码。三、试验源代码#include<stdio.h>#include<stdlib.h>#include<stack>#include<queue>usingnamespacestd;#defineElemTypeint//元素类型typedefstructBiTNode{\ ElemTypedata;structBiTNode*lchild,*rchild;}BiTNode,*BiTree;stack<BiTree>S;intHeight,Num;//树高及叶子個数intPreCreateBiTree(BiTree&T)//递归先序建立{ inte; scanf("%d",&e); if(!e){T=NULL;return1;} T=(BiTree)malloc(sizeof(BiTNode)); if(!T){printf("失败\n");return0;} T->data=e; PreCreateBiTree(T->lchild); PreCreateBiTree(T->rchild); return1;}voidMidVisit(BiTree&T)//递归中序遍历{ if(!T)return; MidVisit(T->lchild); printf("%d",T->data); MidVisit(T->rchild);}void_PreVisit(BiTree&T)//非递归先序遍历{ BiTreet=T,tem; //printf("非递归先序遍历:"); while(!S.empty())S.pop(); if(!T)return; S.push(t); while(!S.empty()){ while(S.top()){ printf("%d",(S.top())->data); S.push((S.top())->lchild); } S.pop(); if(S.empty())break; tem=S.top(); S.pop(); S.push(tem->rchild); } printf("\n");}void_MidVisit(BiTree&T)//非递归中序遍历{ BiTreet=T,tem; //printf("非递归中序遍历:"); while(!S.empty())S.pop();//清空栈 if(!T)return; S.push(t); while(!S.empty()){ while(S.top()){S.push((S.top())->lchild);} S.pop(); if(S.empty())break; tem=S.top();printf("%d",tem->data); S.pop(); S.push(tem->rchild);} printf("\n");}void_BehVisit(BiTree&T)//非递归後序遍历{ BiTreep; //printf("非递归後序遍历:"); while(!S.empty())S.pop();//清空栈 S.push(T); while(!S.empty()){ while(S.top()!=NULL)S.push((S.top())->lchild); p=S.top(); S.pop(); boolflag=true; while(!S.empty()&&flag){ BiTreer=S.top(); if(r->rchild==p){ printf("%d",r->data); p=S.top();S.pop(); } else{ S.push(r->rchild); flag=false; } } } printf("\n");}voidLayerVisit(BiTree&T)//层次遍历{ BiTreetem; queue<BiTree>Q;//定义队列 printf("层次遍历:"); Q.push(T); while(!Q.empty()){ tem=Q.front(); Q.pop(); if(tem->lchild)Q.push(tem->lchild); if(tem->rchild)Q.push(tem->rchild); printf("%d",tem->data); } printf("\n");}voidNum_Height(BiTree&T,inth)//计算树的叶子個数和高度{ h++; if(!T)return; if(T->lchild==NULL&&T->rchild==NULL){ Num++; if(h>Height)Height=h; return; } //printf("%d",T->data);Num_Height(T->lchild,h); Num_Height(T->rchild,h);}//主函数的实現intmain(){ BiTreeT,Thrt;PreCreateBiTree(T);//先序创立二叉树 /*递归先序、中序、後序遍历*/ printf("递归先序、中序、後序遍历:\n"); PreVisit(T); printf("\n"); MidVisit(T);printf("\n"); BehVisit(T); printf("\n"); /*非递归先序、中序、後序遍历*/ printf("非递归先序、中序、後序遍历:\n"); _PreVisit(T);_MidVisit(T); _BehVisit(T); /*层次遍历*/ LayerVisit(T);/*中序线索线索二叉树并遍历*//* printf("中序线索线索二叉树并遍历:"); MidThread(T,Thrt); MidThreadVisit(Thrt);*/ /*计算二叉树的高度及叶子個数*/ Num=0;Height=0; inth=0; while(!S.empty())S.pop();//清空栈 Num_Height(T,h);printf("\n此树的高度和叶子個数分别為:%d%d\n",Height,Num);return0;}//测试实例//124005003600700//124005700030600试验成果试验總結本次试验是有关二叉树的常見操作,重要是二叉树的建立和遍历,在這次试验中我是按先序方式建立二叉树的,而遍历方式则相對要多某些,有递归的先序、中序、後序遍历,和非递归的先序、中序、後序遍历,此外尚有层次遍历,其中递归的三种遍历大同小异,此处仅以中序替代,非递归遍历
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 汽车美容方案设计与实施试题及答案
- 行政管理未来发展方向试题及答案
- 2025企业员工岗前安全培训考试试题及答案突破训练
- 2024-2025新入职工安全培训考试试题带答案(基础题)
- 25年公司员工安全培训考试试题含答案【模拟题】
- 25年企业级安全培训考试试题及参考答案【基础题】
- 2025年企业安全培训考试试题答案研优卷
- 2025员工三级安全培训考试试题附参考答案(轻巧夺冠)
- 常见2024年统计学考试试题及答案
- 2025日常安全培训考试试题黄金题型
- GB/T 242-2007金属管扩口试验方法
- GB/T 16921-2005金属覆盖层覆盖层厚度测量X射线光谱方法
- GB/T 11168-2009光学系统像质测试方法
- 新教材高中历史必修中外历史纲要上全册教学课件
- 公共部门人力资源管理概论课件
- 六年级下册科学第一单元质量检测卷粤教版(含答案)
- 【计算机应用基础试题】韩山师范大学2022年练习题汇总(附答案解析)
- 爱爱医资源-生理学-122排卵、黄体形成与月经周期
- 科技小巨人工程验收培训
- 大班绘本教案《月亮冰激凌》
- 火力发电厂运煤设计规程
评论
0/150
提交评论