厦门理工 c语言数据结构 实验6.doc
数据结构实验报告实验序号6 实验项目名称树和二叉树的操作学号姓名专业、班实验地点指导教师实验时间一、实验目的及要求1、进一步掌握指针变量、动态变量的含义。2、掌握二叉树的结构特征,以及各种存储结构的特点及适用范围。3、掌握用指针类型描述、访问和处理二叉树的运算。4、掌握用二叉树前序、中序、后序、层次遍历的方法。二、实验设备(环境)及要求微型计算机;windows 操作系统;Microsoft Visual Studio 6.0集成开发环境。三、实验内容与步骤1根据P129的方法,将a*b-cd*e/fg转化为表达式二叉树(绘图),并写出表达式二叉树的前序、中序和后序遍历顺序。2. 链式表表示和实现二叉树如下include stdio.hinclude stdlib.hdefine max 50typedef struct liuyuint data;struct liuyu *lchild,*rchild;test;liuyu *root,*p,*qmax;int sum0;int msizeoftest; void insert_dataint x /*生成二叉排序树*/ liuyu *p,*q,*s;stest*mallocm;s-datax;s-lchildNULL;s-rchildNULL;ifrootroots; proot; whilep /*如何接入二叉排序树的适当位置*/qp;ifp-dataxprintfdata already exist n;return;else ifxp-datapp-lchild; else pp-rchild;ifxq-dataq-lchilds;else q-rchilds;void main /*先生成二叉排序树*/int i,x;i1; rootNULL; /*千万别忘了赋初值给root*/doprintfplease datad,i;i;scanfd,x; /*从键盘采集数据,以-9999表示输入结束*/ifx-9999 printfnNow output data valuen; else insert_datax; /*调用插入数据元素的函数*/ whilex-9999; 改写以上程序,实现功能如下任选两题1.编写函数实现前序、中序和后序遍历。运行结果截图2.编写函数实现计算叶节点个数。运行结果截图四、分析与讨论对上机实践结果进行分析,上机的心得体会。五、教师评语签名日期成绩附源程序清单1. include stdlib.hinclude stdio.htypedef int TElemType;typedef struct BiTNodeTElemType data;struct BiTNode *lchild,*rchild;BiNode, *Bitree;DLR Bitree root if root NULL 非空二叉树 printfd,root-data; 访问D DLRroot-lchild; 递归遍历左子树 DLRroot-rchild; 递归遍历右子树 return0; LDRBitree root ifroot NULL LDRroot-lchild; printfd,root-data; LDRroot-rchild; return0;LRD Bitree root ifroot NULL LRDroot-lchild; LRDroot-rchild; printfd,root-data; return0;Bitree root;定义根结点 void insert_dataint x /*生成/树*/ Bitree p,q,s;sBitreemallocsizeofBiNode; 创建结点s-datax; 结点赋值s-lchildNULL;s-rchildNULL;ifrootroots; elseproot; whilep /*如何接入二叉排序树的适当位置*/qp;ifp-datax 相同结点不能重复插入printfdata already exist n;return;else ifxp-datapp-lchild; else pp-rchild;ifxq-dataq-lchilds;else q-rchilds;void main /*先生成二叉排序树*/int i1,x; i记录结点个数,x存放结点值rootNULL; /*千万别忘了赋初值给root*/printf请输入数据,-9999表示输入结束n;doprintfplease data d,i;i;scanfd,x; /*从键盘采集数据,以-9999表示输入结束*/ifx-9999 printfnNow output data valuen; else insert_datax; /*调用插入数据元素的函数*/whilex-9999; printfnDLR; DLRroot; printfnLDR; LDRroot; printfnLRD; LRDroot;2.include stdlib.hinclude stdio.htypedef int TElemType;typedef struct BiTNodeTElemType data;struct BiTNode *lchild,*rchild;BiNode, *Bitree;Bitree root;定义根结点 int CountLeaf Bitree root 返回指针T所指二叉树中所有叶子结点个数int m,n; if root return 0; if root-lchild root-rchild return 1; else m CountLeaf root-lchild; n CountLeaf root-rchild; return mn; else CountLeafvoid insert_dataint x /*生成/树*/ Bitree p,q,s;sBitreemallocsizeofBiNode; 创建结点s-datax; 结点赋值s-lchildNULL;s-rchildNULL;ifrootroots; elseproot; whilep /*如何接入二叉排序树的适当位置*/qp;ifp-datax 相同结点不能重复插入printfdata already exist n;return;else ifxp-datapp-lchild; else pp-rchild;ifxq-dataq-lchilds;else q-rchilds;void main /*先生成二叉排序树*/int i1,x; i记录结点个数,x存放结点值int sum;rootNULL; /*千万别忘了赋初值给root*/printf请输入数据,-9999表示输入结束n;doprintfplease data d,i;i;scanfd,x; /*从键盘采集数据,以-9999表示输入结束*/ifx-9999 printfnNow output data valuen; else insert_datax; /*调用插入数据元素的函数*/whilex-9999;printf n叶节点个数;sumCountLeaf root;printfdn,sum;