数据结构二叉树综合实验报告(共14页).doc

上传人:飞****2 文档编号:13526456 上传时间:2022-04-29 格式:DOC 页数:14 大小:111KB
返回 下载 相关 举报
数据结构二叉树综合实验报告(共14页).doc_第1页
第1页 / 共14页
数据结构二叉树综合实验报告(共14页).doc_第2页
第2页 / 共14页
点击查看更多>>
资源描述

《数据结构二叉树综合实验报告(共14页).doc》由会员分享,可在线阅读,更多相关《数据结构二叉树综合实验报告(共14页).doc(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上武 汉 工 程 大 学计算机科学与工程学院数据结构实验报告2专业班级智能01实验地点机电大楼4 楼 419 机房学生学号指导教师学生姓名实验时间第 12 周第14 周 星期2 实验项目树性结构的综合使用实验类别操作性() 验证性( ) 设计性( ) 综合性( ) 其它( )实验目的及要求1.实现二叉树的先序,中序与后序遍历的递归算法与非递归算法。2.求二叉树的结点个数,叶子结点个数,二叉树的高度,度为2的结点个数。成 绩 评 定 表类 别评 分 标 准分值得分合 计上机表现积极出勤、遵守纪律认真完成设计任务30分报告质量操作规范、功能正确填写完整、体现收获70分说明:

2、 评阅教师: 日 期: 20 年 月 日实 验 内 容一实验内容1.实现二叉树的先序,中序与后序遍历的递归算法与非递归算法。2.求二叉树的结点个数,叶子结点个数,二叉树的高度,度为2的结点个数。二程序的设计思想1实现二叉树的先序,中序与后序遍历的递归算法与非递归算法。先构造二叉树,根据先序遍历的思想,输入根后,再输入左子树,直至左子树为空则输入上一层右字树。(1)二叉树的非递归遍历是用显示栈来存储二叉树的结点指针,先序遍历时,按二叉树前序遍历的顺序访问结点,并将结点的指针入栈,直到栈顶指针指向结点的左指针域为空时取出栈顶指针并删除栈顶指针,访问刚取出的指针指向的结点的右指针指向的结点并将其指针

3、入栈,如此反复执行则为非递归操作。(2)二叉树的递归遍历:若二叉树为空,则空操作先序遍历:(a)访问根结点; (b)先序遍历左子树;(c)先序遍历右子树。中序遍历 : (a)中序遍历左子树; (b)访问根结点;(c)中序遍历右子树后序遍历: (a)后序遍历左子树; (b)后序遍历右子树; (c)访问根结点。2.求二叉树的结点个数,叶子结点个数,二叉树的高度,度为2的结点个数。(1)求二叉树的叶子结点个数:先分别求得左右子树中个叶子结点的个数,再计算出两者之和即为二叉树的叶子结点数。(2)二叉树的结点个数之和:先分别求得左子树右子树中结点之和,再计算两者之和即为所求。(3)二叉树的高度:首先判断

4、二叉树是否为空,若为空则此二叉树高度为0,。否则,就先分别求出左右子树的深度进行比较,取较大的树加一即为所求。(4)二叉树的度为2的结点个数:计算有左右孩子的结点个数,即为度为2的结点个实 验 内 容数。三编程过程中遇到的问题及解决办法(1)后续遍历的非递归函数涉及到回溯的方法,开始设计的方案想的太过于简单,所以形成了死循环,总是在最后的节点处不停地循环,后改成回溯后,该问题得到解决。(2)计算二叉树中度为2的结点个数中,返回循环的时候不论根结点有没有左右子树,但个人设计时,根总是会将自己默认为有左右子树,自行增加1.后在同学帮助下才看到自己的这个失误。四程序的闪光点(自我评价)1.程序模块化

5、,各个函数分开描述,方便观察2.关键处有注释3.建立二叉树时,用先序提示输入,比较人性化。 五程序源代码(以文件为单位提供)#include#include#define Maxsize 100typedef struct TREEstruct TREE *lTree;struct TREE *rTree;char data;Tree;void InitTree(Tree*);/初始化树void CreatTree(Tree*);/创建二叉树void PreTraverse(Tree*);/先序遍历递归void PreOrderTraverse(Tree*);/先序遍历非递归void InTr

6、averse(Tree *tree);/中序遍历递归void InOrderTraverse(Tree *tree);/中序遍历非递归void PostTraverse(Tree *tree);/后序遍历递归void LastOrderTraverse(Tree *tree);/后序遍历非递归int DepthTree(Tree *tree);/计算树的深度int LeafsTree(Tree *tree);/计算叶子结点个数int NodesTree(Tree *tree);/计算结点个数int Twochild(Tree*tree);/计算度为二的结点个数void main()int H,

7、L;Tree tree;/Tree m;InitTree(&tree);CreatTree(&tree);cout先序遍历递归为:;PreTraverse(&tree);/先序遍历递归cout先序遍历非递归:;PreOrderTraverse(&tree);/先序遍历非递归coutendl;cout中序遍历递归为:;InTraverse(&tree);/中序遍历递归cout中序遍历非递归:;InOrderTraverse(&tree);/中序遍历非递归coutendl;cout后序遍历递归为:;PostTraverse(&tree);/后序遍历递归cout后序遍历非递归:;LastOrderT

8、raverse(&tree);/后序遍历非递归coutendl; cout树的深度为:; H=DepthTree(&tree);coutHendl;cout叶子结点个数:;L=LeafsTree(&tree); coutLendl;cout结点个数:;coutNodesTree(&tree)endl;cout度为二的结点个数;L=Twochild(&tree);coutLlTree=NULL;tree-rTree=NULL;tree-data=0;void CreatTree(Tree *tree)/创建树int n=0,m=0,i=0;if(tree-data=0)couttree-data

9、;cout节点datan;if(n=1)Tree *lTree=(Tree*)malloc(sizeof(Tree);tree-lTree=lTree;lTree-lTree=NULL;lTree-rTree=NULL;lTree-data=0;CreatTree(tree-lTree);cout节点datai;if(i=0);else if(i=1)Tree *rTree=(Tree*)malloc(sizeof(Tree);tree-rTree=rTree;rTree-lTree=NULL;rTree-rTree=NULL;rTree-data=0;CreatTree(tree-rTree

10、);else if(n=0)cout节点datam; if(m=0);else if(m=1)Tree *rTree=(Tree*)malloc(sizeof(Tree);tree-rTree=rTree;rTree-lTree=NULL;rTree-rTree=NULL;rTree-data=0;CreatTree(tree-rTree);void PreTraverse(Tree*tree)/先序遍历递归if(tree!=NULL)coutdatalTree!=NULL)PreTraverse(tree-lTree);PreTraverse(tree-rTree);else if(tree

11、-rTree!=NULL)PreTraverse(tree-rTree);else;void PreOrderTraverse(Tree *tree)/先序遍历非递归Tree *S80=NULL;int top =0;while (tree!=NULL)|(top)if (tree!=NULL)coutdatalTree;elsetree = Stop;top-;tree = tree-rTree;void InTraverse(Tree *tree)/中序遍历递归if(tree!=NULL)if(tree-lTree!=NULL)InTraverse(tree-lTree);coutdata

12、rTree);else if(tree-rTree!=NULL)coutdatarTree);elsecoutdatalTree;elsetree = Dtop;top-;coutdatarTree;void PostTraverse(Tree *tree)/后序遍历递归if(tree!=NULL)if(tree-lTree!=NULL)PostTraverse(tree-lTree);PostTraverse(tree-rTree);coutdatarTree!=NULL)PostTraverse(tree-rTree);coutdata ;elsecoutdatalTree;if(top!

13、=0)p=stacktop-rTree;if(p=NULL)coutdatarTree!=NULL)if(stacktop-rTree-data=stacktop+1-data)coutdatarTree;elsep=NULL;int DepthTree(Tree *tree) /深度函数 int u,v; if (tree=NULL) return 0; u=DepthTree(tree-lTree); v=DepthTree(tree-rTree); if (uv) return (u+1); return (v+1); int LeafsTree(Tree *tree)/子叶个数函数 i

14、nt num1,num2; if(tree=NULL) return 0; else if(tree-lTree=NULL&tree-rTree=NULL) return 1; else num1=LeafsTree(tree-lTree); num2=LeafsTree(tree-rTree); return(num1+num2); int NodesTree(Tree *tree)/结点个数函数 int num1,num2; if(tree=NULL) return 0; if(tree-lTree=NULL&tree-rTree=NULL) return 1; else num1=Nod

15、esTree(tree-lTree); num2=NodesTree(tree-rTree); return(num1+num2+1); int Twochild(Tree*tree)/度为2的 int n=0; if(tree=NULL) return(0); if(tree-lTree!=NULL&tree-rTree!=NULL) n=1; return(Twochild(tree-lTree)+Twochild(tree-rTree)+n); 实 验 总 结通过这次实验使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁