山东大学数据结构实验报告五

山东大学数据结构实验报告五

ID:47491642

大小:143.50 KB

页数:16页

时间:2020-01-12

山东大学数据结构实验报告五_第1页
山东大学数据结构实验报告五_第2页
山东大学数据结构实验报告五_第3页
山东大学数据结构实验报告五_第4页
山东大学数据结构实验报告五_第5页
资源描述:

《山东大学数据结构实验报告五》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、数据结构实验报告——实验五 实验题目:排序算法学号:201411130001日期:2015.12.11班级:计机14.1姓名:刘方铮Email:liu191150932@163.com实验目的:二叉树操作任务要求: 一、实验目的1、掌握二叉树的基本概念,链表描述方法;遍历方法。二、实验内容创建二叉树类。二叉树的存储结构使用链表。提供操作:前序遍历、中序遍历、后序遍历、层次遍历、计算二叉树结点数目、计算二叉树高度。对建立好的二叉树,执行上述各操作。接收键盘录入的二叉树前序序列和中序序列(各元素各不相同),输出该二叉树的后序序列。软件环境:Win7操作系统开发工具:visualC++

2、6.0实验代码:#include#include#include#includeusingnamespacestd;#defineMaxSize100#defineMaxWidth40#include#include#include#includetypedefcharElemType;typedefstructtnode{ElemTypedata;structtnode*lchild,*rchild;}BTNode;/*建立二叉树算法描述:

3、用ch扫描采用括号表示法表示二叉树的字符串Str。分以下几种情况:1、若ch='('则将前面刚创建的结点作为双亲结点进栈,并置k=1,表示其后创建的结点将做为这个结点的左孩子结点。2、若ch=')'表示栈中结点的左右孩子结点处理完毕,退栈。3、若ch=','表示其后创建的结点为右孩子结点4、其他情况表示要创建一个结点,并根据k值建立它与栈中结点之间的关系,当k=1时,表示这个结点作为栈中结点的左孩子结点,当k=2时,表示这个结点作为栈中结点的右孩子结点。如此循环直到str处理完毕。算法中使用一个栈st保存双亲结点,top为其栈指针,k指定其后处理的结点是双亲结点(保存在栈中)的左

4、孩子结点(k=1)还是右孩子结点(k=2)。*/voidCreateBtree(BTNode*&bt,char*str)//由str创建二叉链bt{BTNode*st[MaxSize],*p=NULL;inttop=-1,k,j=0;charch;bt=NULL;//建立的二叉树初始为空ch=str[j];while(ch!='')//str未扫描完时循环{switch(ch){case'(':top++;st[top]=p;k=1;break;//为左孩子结点case')':top--;break;case',':k=2;break;default:p=(BTNode*)m

5、alloc(sizeof(BTNode));p->data=ch;p->lchild=p->rchild=NULL;if(bt==NULL)bt=p;else{switch(k){case1:st[top]->lchild=p;break;case2:st[top]->rchild=p;break;}}}j++;ch=str[j];}}/*求二叉树高度算法:递归模型如下if(b==NULL)f(b)=0;elsef(b)=max{f(b)->lchild,f(b)->rchild}+1;*/intBTHeight(BTNode*bt){intlchilddep,rchilddep

6、;if(bt==NULL)return0;else{lchilddep=BTHeight(bt->lchild);rchilddep=BTHeight(bt->rchild);return(lchilddep>rchilddep)?(lchilddep+1):(rchilddep+1);}}/*求二叉树结点个数算法:递归模型如下if(bt==NULL)f(b)=1;elsef(bt)=f(bt->lchild)+f(bt->rchild)+1;*/intNodeCount(BTNode*bt){intnum1,num2;if(bt==NULL)return0;else{num1=

7、NodeCount(bt->lchild);num2=NodeCount(bt->rchild);returnnum1+num2+1;}}/*求二叉树叶子结点个数算法:递归模型如下if(bt==NULL)f(bt)=0;if(bt为叶子结点)f(bt)=1;elsef(bt)=f(bt->lchild)+f(bt->rchild);*/intLeafCount(BTNode*bt){intnum1,num2;if(bt==NULL)return0;elseif(bt->lchil

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。