


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验三二叉树、实验目的1. 掌握二叉树的链式存储结构及其相关操作的实现。2 掌握二叉树的先序、中序、后序的递归遍历算法。3理解二叉树的各种非递归遍历算法的实现。、实验要求1.实验前做好充分准备,包括复习第六章所学容,事先预习好本次实验容。2实验时记录实验结果,按要求完成各题。3实验结束后,给出实验总结与分析并及时给出本次实验的实验报告。三、实验题目本次实验给出的选定题目如下表所示。实验名称学时实验容实验 要求实验类型二叉树4(1)二叉树的创建、递归遍历及其它基本操作 的实现。必做设计性(2)二叉树非递归遍历算法的实现。选做设计性(3 )哈夫曼树及哈夫曼编码的算法头现。选做综合性说明:(1) 实
2、验容1)为必做容。(2) 实验容2)与实验容3)为选做容。四、实验容与要求1、实验题目一:(1) 二叉树的创建、递归遍历及其它基本操作的实现。要求:定义用二叉链表表示的二叉树,并实现二叉树的创建、遍历(先序、中序后序) 的递归算法及求深度操作等,并对其进行验证。2、实验题目二:二叉树非递归遍历算法的实现要求:在题目一的基础上,实现二叉树的非递归遍历算法(先序、中序、后序或按层) 并对其进行验证。3、实验题目三:哈夫曼树及哈夫曼编码的算法实现要求:编程实现哈夫曼树的创建及利用哈夫曼树求解哈夫曼编码。五、实验步骤 源代码:#include<iostream>#include<st
3、ack> using namespace std;template<class T>struct BinTreeNode/二叉树结点类定义T data; / 数据域BinTreeNode<T> *leftChild,*rightChild;/ 左子女、右子女域BinTreeNode(T x=T(),BinTreeNode<T>* l =NULL,BinTreeNode<T>* r = NULL ) :data(x),leftChild(l),rightChild(r)/ 可选择参数的默认构造函数;/template<class T&g
4、t;void PreOrder_2(BinTreeNode<T> *p)/ 非递归前序遍历stack<BinTreeNode<T> * > S;while(p!=NULL | !S.empty()while(p!=NULL)cout<<p->data;S.push(p);p=p->leftChild;if(!S.empty()/访问根结点/遍历指针进到左子女结点/栈不空时退栈p=S.top();/遍历指针进到右子女结点S.pop(); p = p->rightChild;/template<class T>void
5、InOrder_2(BinTreeNode<T> *p)/ 非递归中序遍历stack<BinTreeNode<T>* > S;do while(p!=NULL) S.push(p);p=p->leftChild;if(!S.empty()p=S.top();S.pop();cout<<p->data;p=p->rightChild;while(p !=NULL | !S.empty();/遍历指针未到最左下的结点,不空/栈不空时退栈/template<class T>void PostOrder_2(BinTreeN
6、ode<T> *p) / 非递归后序遍历 stack<BinTreeNode<T> * > S;stack<int> tag;/ 定义一个新的栈用来保存 tag 域判别根结点的左右子树是否均遍历过 while(p != NULL | !S.empty() / 左子树经过结点加 L 进栈while(p!=NULL)S.push(p); / 首先将 t 和 tag 为 0 入栈,遍历左子树tag.push(O);/遍历左子树前的现场保护p=p->leftChild;while( !S.empty() && tag.top()=1
7、)p=S.top();S.pop();tag.pop();cout<<p->data;if( !S.empty()/最后访问根结点。tag.pop();tag.push(1);/ 遍历右子树前的现场保护 ,修改栈顶 tag 为 1,遍历右子树 p=S.top(); / 取栈顶保存的指针p=p->rightChild;elsebreak;/template<class T>void InOrder_1(BinTreeNode<T> * subTree)/ 递归函数:中序次序遍历以subTree 为根的子树。if(subTree !=NULL) /N
8、ULL 是递归终止条件 InOrder_1(subTree->leftChild); /中序遍历根的左子树cout<<subTree->data; /访问根结点 InOrder_1(subTree->rightChild);/中序遍历根的右子树/template<class T>void PreOrder_1(BinTreeNode<T> * subTree)/递归函数:前序遍历以subTree为根的二叉树。if(subTree !=NULL)/递归结束条件cout<<subTree->data; 访问根结点PreOrde
9、r_1(subTree->leftChild);/前序遍历根的左子树PreOrder_1(subTree->rightChild);/前序遍历根的右子树/template<class T>void PostOrder_1(BinTreeNode<T> * subTree)/递归函数:后序次序遍历以subTree为根的子树。if(subTree !=NULL)/NULL 是递归终止条件PostOrder_1(subTree->leftChild); /后序遍历根的左子树PostOrder_1(subTree->rightChild); / 后序遍历
10、根的右子树cout<<subTree->data; /访问根结点/template<class T>void CreateBinTree(BinTreeNode<T> * & subTree)/ 递归方式建立二叉树T item;cin>>item;if(item !=-1) subTree = new BinTreeNode<T>();if(subTree = NULL)cerr<<" 存储分配错! "<<endl; exit(1);subTree->data = ite
11、m;CreateBinTree(subTree->leftChild); / 递归建立左子树 CreateBinTree(subTree->rightChild); /递归建立右子树 else subTree = NULL;/封闭指向空子树的指针 int main()BinTreeNode<int> * Tree = NULL;cout<<"请输入每个结点,回车确认,并以-1结束:CreateBinTree(Tree);cout<<" 先序遍历二叉树结果:"PreOrder_1(Tree);cout<<e
12、ndl;cout<<" 中序遍历二叉树结果:"InOrder_1(Tree);cout<<endl;cout<<" 后序遍历二叉树结果:"PostOrder_1(Tree); cout<<e ndl;cout<<"非递归前序遍历二叉树结果:PreOrder_2(Tree); cout<<e ndl;cout<<"非递归中序遍历二叉树结果:InO rder_2(Tree); cout<<e ndl;cout<<"非递归后序遍历二叉树结果:PostOrder_2(Tree); cout<<e ndl; return 1;调试图片:E:C + 二叉錚Debug'BinaryTree.exe"-1 1 1 确一 车6! e6果果果nil3結結管那耶应O 回果果M-叉叉叉C ,5结结结二二二to 点4BBS历历历y 结1叉叉叉鲁薯 个二二二 Iwty 每T历历IQ刖中后an 入3遍归归S 输 2S5EO!递递es 请 L 先中 pr并以-1结束
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 房地产团队培训
- 传染病相关知识培训
- 左关节僵硬的护理措施
- 我的教育教学观
- 幼儿动物创美课件
- 旧旧乐器回收协议
- 施工劳务性质协议
- 教科版(2017)科学三年下册《我们的“过山车”》说课(附反思、板书)课件
- 我会躲猫猫安全教育课
- 拍卖市场细分协议
- (二模)温州市2025届高三第二次适应性考试地理试卷(含答案)
- (一模)南京市、盐城市2025届高三年级第一次模拟考试语文试卷
- 退伍军人创业汇报
- 2025年柳州市城中区九年级中考语文二模试卷附答案解析
- 鱼塘承包合同(个人承包)8篇
- 2025年子宫肌瘤临床路径与治疗指南
- 婴幼儿生活照护 课件 6行动手册单元六饮水活动照护
- 石材质量控制及保证措施
- 2024智慧水电厂建设规划方案
- 五官科室发展规划
- 废铜料销售合同
评论
0/150
提交评论