数据结构二叉树综合实验报告.docx

上传人:小飞机 文档编号:3560084 上传时间:2023-03-13 格式:DOCX 页数:13 大小:39.76KB
返回 下载 相关 举报
数据结构二叉树综合实验报告.docx_第1页
第1页 / 共13页
数据结构二叉树综合实验报告.docx_第2页
第2页 / 共13页
数据结构二叉树综合实验报告.docx_第3页
第3页 / 共13页
数据结构二叉树综合实验报告.docx_第4页
第4页 / 共13页
数据结构二叉树综合实验报告.docx_第5页
第5页 / 共13页
亲,该文档总共13页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《数据结构二叉树综合实验报告.docx》由会员分享,可在线阅读,更多相关《数据结构二叉树综合实验报告.docx(13页珍藏版)》请在三一办公上搜索。

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

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

3、删除栈顶指针,访问刚取出的指针指向的结点的右指针指向的结点并将其指针入栈,如此反复执行则为非递归操作。 二叉树的递归遍历:若二叉树为空,则空操作 先序遍历: 访问根结点; 先序遍历左子树; 先序遍历右子树。 中序遍历 : 中序遍历左子树; 访问根结点; 中序遍历右子树 后序遍历: 后序遍历左子树; 后序遍历右子树; 访问根结点。 2.求二叉树的结点个数,叶子结点个数,二叉树的高度,度为2的结点个数。 求二叉树的叶子结点个数:先分别求得左右子树中个叶子结点的个数,再计算出两者之和即为二叉树的叶子结点数。 二叉树的结点个数之和:先分别求得左子树右子树中结点之和,再计算两者之和即为所求。 二叉树的高

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

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

6、PreOrderTraverse(Tree*);/先序遍历非递归 void InTraverse(Tree *tree);/中序遍历递归 void InOrderTraverse(Tree *tree);/中序遍历非递归 void PostTraverse(Tree *tree);/后序遍历递归 void LastOrderTraverse(Tree *tree);/后序遍历非递归 int DepthTree(Tree *tree);/计算树的深度 数据结构实验报告 3 计算机科学与工程学院 int LeafsTree(Tree *tree);/计算叶子结点个数 int NodesTree(T

7、ree *tree);/计算结点个数 int Twochild(Tree*tree);/计算度为二的结点个数 void main / int H,L; Tree tree; Tree m; InitTree(&tree); CreatTree(&tree); cout先序遍历递归为:; PreTraverse(&tree);/先序遍历递归 cout先序遍历非递归:; PreOrderTraverse(&tree);/先序遍历非递归 coutendl; cout中序遍历递归为:; InTraverse(&tree);/中序遍历递归 cout中序遍历非递归:; InOrderTraverse(&t

8、ree);/中序遍历非递归 coutendl; cout后序遍历递归为:; PostTraverse(&tree);/后序遍历递归 cout后序遍历非递归:; LastOrderTraverse(&tree);/后序遍历非递归 coutendl; cout树的深度为:; H=DepthTree(&tree); coutHendl; cout叶子结点个数:; 数据结构实验报告 4 计算机科学与工程学院 L=LeafsTree(&tree); coutLdata=0) cout节点datan; if(n=1) Tree *lTree=(Tree*)malloc(sizeof(Tree); tree

9、-lTree=lTree; 数据结构实验报告 5 cout结点个数:; coutNodesTree(&tree)endl; cout度为二的结点个数; L=Twochild(&tree); coutLlTree=NULL; tree-rTree=NULL; tree-data=0; couttree-data; 计算机科学与工程学院 else if(n=0) cout节点datam; lTree-lTree=NULL; lTree-rTree=NULL; lTree-data=0; CreatTree(tree-lTree); cout节点datai; if(i=0); else if(i=1

10、) Tree *rTree=(Tree*)malloc(sizeof(Tree); tree-rTree=rTree; rTree-lTree=NULL; rTree-rTree=NULL; rTree-data=0; CreatTree(tree-rTree); if(m=0); else if(m=1) Tree *rTree=(Tree*)malloc(sizeof(Tree); tree-rTree=rTree; rTree-lTree=NULL; rTree-rTree=NULL; 数据结构实验报告 6 计算机科学与工程学院 void PreTraverse(Tree*tree)/先

11、序遍历递归 void PreOrderTraverse(Tree *tree)/先序遍历非递归 Tree *S80=NULL; int top =0; while (tree!=NULL)|(top) 数据结构实验报告 7 rTree-data=0; CreatTree(tree-rTree); if(tree!=NULL) coutdatalTree!=NULL) else if(tree-rTree!=NULL) else; PreTraverse(tree-rTree); PreTraverse(tree-lTree); PreTraverse(tree-rTree); 计算机科学与工程

12、学院 if (tree!=NULL) coutdatalTree; void InTraverse(Tree *tree)/中序遍历递归 if(tree!=NULL) if(tree-lTree!=NULL) else if(tree-rTree!=NULL) coutdatarTree; InTraverse(tree-lTree); coutdatarTree); 计算机科学与工程学院 void InOrderTraverse(Tree *tree)/中序遍历非递归 Tree *D80=NULL; int top =0; while (tree!=NULL)|(top) if (tree!

13、=NULL) top+; Dtop = tree; else coutdatarTree); tree = tree-lTree; void PostTraverse(Tree *tree)/后序遍历递归 数据结构实验报告 9 else tree = Dtop; top-; coutdatarTree; 计算机科学与工程学院 void LastOrderTraverse(Tree *tree)/后序遍历非递归 Tree *stackMaxsize=NULL,*p; p=tree; int top=0,tag=1,i=0,k=0; while(p!=NULL | top) i=1; while(

14、p!=NULL) 数据结构实验报告 10 if(tree!=NULL) if(tree-lTree!=NULL) else if(tree-rTree!=NULL) else coutdatarTree); coutdatalTree); PostTraverse(tree-rTree); coutdatalTree; 计算机科学与工程学院 if(top!=0) p=stacktop-rTree; if(p=NULL) 数据结构实验报告 11 coutdatarTree; while(i) if(stacktop!=NULL) else i=0; if(stacktop-rTree!=NULL

15、) else i=0; if(stacktop-rTree-data=stacktop+1-data) else i=0; coutdatalTree); v=DepthTree(tree-rTree); if (uv) return (u+1); return (v+1); int LeafsTree(Tree *tree)/子叶个数函数 int num1,num2; if(tree=NULL) return 0; else if(tree-lTree=NULL&tree-rTree=NULL) return 1; else num1=LeafsTree(tree-lTree); num2=

16、LeafsTree(tree-rTree); return(num1+num2); 数据结构实验报告 12 计算机科学与工程学院 int NodesTree(Tree *tree)/结点个数函数 int num1,num2; if(tree=NULL) return 0; if(tree-lTree=NULL&tree-rTree=NULL) return 1; else num1=NodesTree(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); 数据结构实验报告 13 计算机科学与工程学院 实 验 总 结 通过这次实验使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。 数据结构实验报告 14

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号