付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验三二叉树操作实验时间:2011年4月28日12:50-15:50(地点:7-215)实验目的:理解二叉树的逻辑特点和二叉树的性质;掌握二叉树的二叉链表存储结构,掌握二叉树的遍历算法的递归与非递归实现具体实验题目:(任课教师根据实验大纲自己指定)每位同学按下述要求实现相应算法:以二叉链表为存储结构,实现二叉树的创建、遍历算法1)问题描述:在主程序中提供下列菜单: 1…建立树 2…前序遍历树 3…中序(非递归)遍历树4…后序遍历树 0…结束2)实验要求:定义下列过程:CreateTree():按从键盘输入的前序序列,创建树PreOrderTree():前序遍历树(递归)InOrderTree():中序(非递归)遍历树LaOrderTree():后序遍历树(递归)1)算法设计思路简介在建立建立二叉树的函数时,开始使二叉树为空,str扫描完成循环,先定义左节点,再定义右节点,p指向二叉树的根结点,在建立输出二叉树的函数时,用括号法表示,先序遍历递归顺序是根,左,右,中序是左,根,右,后序是左,右,根。2)算法描述:可以用自然语言、伪代码或流程图等方式voidCreateBTNode(BTNode*&b,char*str)//由str串创建二叉树voidDispBTNode(BTNode*b)//以括号表示法输出二叉树voidPreOrder(BTNode*b)//先序遍历递归算法voidInOrder1(BTNode*b)//中序遍历非递归算法voidPostOrder(BTNode*b)//后序遍历递归算法3)算法的实现和测试结果:包括算法运行时的输入、输出,实验中出现的问题及解决办法等二叉树不能完全输出,见截图,我考虑过是由于字符串的长度问题影响,但经过调整发现不是这里的问题。代码源:#include<stdio.h>#include<malloc.h>#defineMaxSize100typedefcharElemType;typedefstructnode{ElemTypedata;//数据元素structnode*lchild;//指向左孩子structnode*rchild;//指向右孩子}BTNode;voidCreateBTNode(BTNode*&b,char*str)//由str串创建二叉树{BTNode*St[MaxSize],*p=NULL;inttop=-1,k,j=0;charch;b=NULL;//建立二叉树初始时为空ch=str[j];while(ch!='\0')//str未扫描完成循环{switch(ch){case'(':top++;St[top]=p;k=1;break;//为左节点case')':top--;break;case',':k=2;break;//为右节点default:p=(BTNode*)malloc(sizeof(BTNode));p->data=ch;p->lchild=p->rchild=NULL;if(b==NULL)//p指向二叉树根结点b=p;else//以建立二叉树根结点{switch(k){case1:St[top]->lchild=p;break;case2:St[top]->rchild=p;break;}}}j++;ch=str[j];}}voidDispBTNode(BTNode*b)//以括号表示法输出二叉树{ if(b!=NULL) {printf("%c",b->data); if(b->lchild!=NULL||b->rchild!=NULL) {printf("("); DispBTNode(b->lchild); if(b->rchild!=NULL)printf(","); printf(")"); } } }voidPreOrder(BTNode*b)//先序遍历递归算法{ if(b!=NULL) {printf("%c",b->data);//访问根结点 PreOrder(b->lchild);//递归访问左子数 PreOrder(b->rchild);//递归访问右子数 }}voidInOrder1(BTNode*b)//中序遍历非递归算法{ BTNode*St[MaxSize],*p; inttop=-1; if(b!=NULL) {p=b; while(top>-1||p!=NULL) {while(p!=NULL) {top++; St[top]=p; p=p->lchild; } if(top>-1) {p=St[top]; top--; printf("%c",p->data); p=p->rchild; } }printf("\n"); }}voidPostOrder(BTNode*b)//后序遍历递归算法{ if(b!=NULL) {PostOrder(b->lchild);//递归访问左子数 PostOrder(b->rchild);//递归访问右子数 printf("%c",b->data);//递归访问根结点 }}voidmain(){ BTNode*b; CreateBTNode(b,"A(B(D,E(H(J,k(L,M(,N))))),C(F,G(,I)))"); printf("二叉树b:"); DispBTNode(b); printf("\n"); printf("先序遍历序列:\n"); print
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年中国邮电器材集团有限公司招聘备考题库有答案详解
- 2025年“才聚齐鲁成就未来”山东黄河生态发展集团有限公司招聘备考题库及1套参考答案详解
- 2026年中化学数智科技有限公司招聘备考题库及一套参考答案详解
- 2026年平湖市青少年宫劳务派遣制教师招聘备考题库有答案详解
- 2026年佛山市顺德区莘村中学招聘临聘俄语教师备考题库及参考答案详解1套
- 2026年大商所飞泰测试技术有限公司招聘备考题库及完整答案详解1套
- 2026年恒丰银行济南分行社会招聘备考题库带答案详解
- 2026年南方医科大学珠江医院大数据中心招聘数据工程师备考题库及一套答案详解
- 2026年北京科技大学智能科学与技术学院招聘备考题库参考答案详解
- 2026年中冶建筑研究总院有限公司招聘备考题库及答案详解1套
- 基于Matlab的电力系统故障分析与仿真(毕业论文)
- 朗读艺术入门学习通超星课后章节答案期末考试题库2023年
- 世界贸易组织的法律框架与组织结构
- ESPEN指南外科手术中的临床营养
- 2001广东高考标准分和原始分换算表
- 卡乐康包衣学校培训资料专家讲座
- GB/T 6075.6-2002在非旋转部件上测量和评价机器的机械振动第6部分:功率大于100kW的往复式机器
- 天津市南开中学2022-2023学年高三上学期第三次月考(1月期末考)语文试题 Word版含答案
- 考研考博-英语-上海海事大学考试押题三合一+答案详解4
- 绿色装配式施工方案
- CMA全套文件(质量手册+程序文件+作业指导书+表格)
评论
0/150
提交评论