

下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验内容:实验三 树和二叉树1. 编写函数,输入字符序列,建立二叉树的二叉链表。2. 编写函数,实现二叉树的中序递归遍历算法。(最好也能实现前缀和后缀遍历算 法)3. 编写函数,实现二叉树的中序非递归遍历算法。4. 编写函数,借助队列实现二叉树的层次遍历算法。5. 编写函数,求二叉树的高度。6. 编写函数,求二叉树的结点个数。7. 编写函数,求二叉树的叶子个数。8. 编写函数,交换二叉树每个结点的左子树和右子树。9.编写一个主函数,在主函数中设计一个简单的菜单,分别调试上述算法。实验目的及要求:1. 掌握二叉树的存储实现2. 掌握二叉树的遍历思想3. 掌握二叉树的常见算法的程序实现实验内容、方
2、法与步骤:(使用附页填写并附在本页后)见附页实验结果:见附页小结:通过本次实验,我基本掌握了二叉树的存储实现和二叉树的遍历思想,并且实现了二叉树的几种常见算法。分数:批阅老师:200年 月 日第1页/共13页实验报告(附页)#include #include #define OK 1#define ERROR 0 #define OVERFLOW -2 typedef int status;typedef struct BiNode/二叉链表char Data;struct BiNode* lChild;struct BiNode* rChild;BiNode,*pBiNode;typedef
3、 struct SNode/*链栈的结点类型*/pBiNode elem; /*栈中的元素是指向二叉链表结点的指针*/ struct SNode *next;SNode;struct link /队列链表struct BiNode *p;struct link *next;status CreateTree(BiNode* pTree);status PreOrderTraval(BiNode* pTree);/status InOrderTraval(BiNode* pTree);/ statusPostOrderTraval(BiNode* pTree);/ statusst_InOrde
4、rTraverse(BiNode* pTree);/void TreeLink(BiNode* pTree); / intTreeHeight (BiNode* pTree);/ intCount(BiNode* pTree);/ intTreeNumber(BiNode* pTree);/ voidExchange (BiNode* pTree);/ statusVisit(char Data);队列实现层次遍历二叉树的高度结点个数叶子个数交换左右子树void Display(BiNode* pTree,int Level);BiNode *pRoot=NULL;status CreateT
5、ree(BiNode* pTree) /*Input Example: abd#e#cf#g#*/char ch;scanf(%c,&ch); if(ch=#)前序递归中序递归后序递归 中序非递归遍历(*pTree)=NULL;elseif(!(*pTree)=(BiNode*)malloc(sizeof(BiNode) exit(OVERFLOW);(*pTree)-Data=ch;CreateTree(&(*pTree)-lChild);CreateTree(&(*pTree)-rChild);return OK;status PreOrderTraval(BiNo
6、de* pTree)/前序递归if(pTree)if(Visit(pTree-Data) if(PreOrderTraval(pTree-lChild)if(PreOrderTraval(pTree-rChild)return OK;return ERROR;elsereturn OK;status InOrderTraval(BiNode* pTree)/中序递归if(pTree)if(InOrderTraval(pTree-lChild)if(Visit(pTree-Data)if(InOrderTraval(pTree-rChild)return OK;return ERROR;retu
7、rn ERROR;elsereturn OK;status PostOrderTraval(BiNode* pTree)/后序递归if(pTree) if(PostOrderTraval(pTree-lChild)if(PostOrderTraval(pTree-rChild)if(Visit(pTree-Data)return OK;return ERROR;return ERROR;elsereturn OK;status st_InOrderTraverse(BiNode* pTree)/中序非递归遍历BiNode *p;SNode *q,*Stop=NULL; /*用不带头结点的单链表
8、作为栈的存储结构*/ p=pTree;while(p!=NULL|Stop!=NULL) /*不是空树*/if(p!=NULL)q=(SNode*)malloc(sizeof(SNode);if(q=NULL)return ERROR;q-next=Stop;q-elem=p;Stop=q; /*根结点指针入栈*/ p=p-lChild; /*进入根的左子树*/elseq=Stop;Stop=Stop-next; /*栈顶元素出栈*/ printf(%c,q-elem-Data);/*访问根结点*/ p=q-elem-rChild; /*进入根的右子树*/ free(q); /*释放原栈顶元素
9、的结点空间*/return OK;void TreeLink(BiNode* pTree) /队列实现层次遍历struct link *head,*rear,*temp;head=(struct link *)malloc(sizeof(struct link);head-p=pTree;head-next=NULL;rear=head;doif(head-p-lChild!=NULL)temp=(struct link *)malloc(sizeof(struct link);temp-p=head-p-lChild;temp-next=NULL;rear-next=temp;rear=te
10、mp;if(head-p-rChild!=NULL)temp=(struct link *)malloc(sizeof(struct link);temp-p=head-p-rChild;temp-next=NULL;rear-next=temp;rear=temp;temp=head; printf(%c ,head-p-Data); head=head-next; free(temp);while(head!=NULL);int TreeHeight(BiNode* pTree)/二叉树的高度int hl ,hr ; /左右子树的高度if (pTree = NULL)return 0 ;e
11、lsehl = TreeHeight(pTree- lChild);hr = TreeHeight (pTree- rChild);if (hlhr)return (hl +1);elsereturn (hr +1);int Count(BiNode* pTree)/结点个数return pTree = NULL ? 0 : Count(pTree-lChild) + Count(pTree-rChild) + 1;int TreeNumber(BiNode* pTree)/叶子个数if (pTree=NULL)return 0;if (pTree-lChild =NULL & pTr
12、ee-rChild = NULL)return 1;return TreeNumber(pTree-lChild)+TreeNumber(pTree-rChild);/+1void Exchange (BiNode* pTree )/交换左右子树BiNode* temp;if ( pTree-lChild != NULL | pTree-rChild != NULL )就可以求出结点temp = pTree-lChild; pTree-lChild = pTree-rChild; pTree-rChild = temp; Exchange( pTree-lChild ); Exchange (
13、 pTree-rChild );status Visit(char Data)printf(%c ,Data);return OK;void Display(BiNode* pTree,int Level)/int i;if(pTree=NULL) return;Display(pTree-rChild,Level+1);for(i=0;i=1)printf(-);printf(%cn,pTree-Data);Display(pTree-lChild,Level+1);void CmdList()printf(n_/显示命令列表_ n);printf(请选择操作: n);printf(1.前序
14、递归遍历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(0.退出程序n);/退出printf(n_ n);void init()system (cls);printf(实验三 树和二叉树n); printf(
15、03计本3班n);printf(樊海军2B0324151138n);printf(本程序实现二叉树的常见算法。n);printf(printf(请输入二叉树各元素:(例如abd#e#cf#g#)n); /例如abd#e#cf#g#CreateTree(&pRoot);Display(pRoot,0);CmdList();void ReadCommand(char &c)do c=getchar();while (c!=0&c!=1&c!=2&c!=3&c!=4&c!=5&c!=6&c!=7&c!=8&c!=
16、9);void Interpret(char &c)switch(c)case 1:printf(n前序递归遍历:n);PreOrderTraval(pRoot);CmdList();break;case 2:printf(n中序递归遍历:n);InOrderTraval(pRoot);CmdList();printf(*n);printf(*n);n);break;case 3:printf(n后序递归遍历:n);PostOrderTraval(pRoot);CmdList();break;case 4:printf(n中序非递归遍历:n);st_InOrderTraverse(pR
17、oot);CmdList();break;case 5:printf(n层次遍历:n);TreeLink(pRoot);CmdList();break;case 6:printf(n二叉树高度:n);printf(%dn,TreeHeight(pRoot);CmdList();break;case 7:printf(n结点个数:n);printf(%dn,Count(pRoot);CmdList();break;case 8:printf(n叶子个数:n);printf(%dn,TreeNumber(pRoot);CmdList();break;case 9:printf(n交换左右子树:n);Exchange(pRoot);printf(n交换后的二叉树:n);Display(pRoot,0);CmdList();break;case 0: printf(程序结束,按任意键退出void main() /主函数char cmd;init();doReadCommand(cmd);Interpret(cmd);while (cmd!=0&cmd!=0);!n);CAD:海军的文件学习数据结构实验实验三test3DebugBiTree. exe实验三科和二叉树03计本3赃熒海军2B03241
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 六年级家庭讲座活动方案
- 兰州社区送温暖活动方案
- 共享中心活动方案
- 共享植树活动方案
- 共享面膜活动方案
- 共读教学名著活动方案
- 共青团家风建设活动方案
- 关于中秋大学生活动方案
- 烟草岗位考试试题及答案
- 面试题目及答案高三
- 西藏自治区2022年事业单位考试真题与答案解析
- GB/T 42605-2023移动式压力容器修理导则
- 稀磁半导体与自旋电子学
- GA 1807-2022核技术利用单位反恐怖防范要求
- 2023-2024学年江苏省太仓市小学语文五年级期末自测试卷
- 发展汉语(第二版)高级综合Ⅰ第8课课件
- 《工程伦理论文3700字(论文)》
- GB/T 730-2008纺织品色牢度试验蓝色羊毛标样(1~7)级的品质控制
- GB/T 3672.1-2002橡胶制品的公差第1部分:尺寸公差
- 五年级语文下册词句段运用专项复习教学设计
- 优秀集体评选-会计12级
评论
0/150
提交评论