1、实验五二叉树遍历2014秋学期算法与数据结构实验报告书 项目名称: 二叉树的遍历指导老师: 金萍老师 项目时间:2014-11-8 项目成员: 张峻峰瞿子晶一引言21.1编写目的21、熟练掌握二叉树的存储结构。22、熟练掌握二叉树基本操作的实现。21.2参考资料2二项目介绍22.1项目简介22.2软件运行环境2三需求分析23.1总体需求分析23.2主界面需求分析2四总体模块设计31.操作菜单:32.选择菜单:33.二叉树的创建:34.二叉树的销毁:35.先序遍历二叉树:36.中序遍历二叉树:37.后序遍历二叉树:38.层序遍历二叉树:310.测量二叉树深度:3五详细设计41.主函数42.菜单函
2、数43.二叉树操作菜单44.创建二叉树函数45.销毁二叉树函数46.先序遍历二叉树47.中序遍历二叉树58.后序遍历二叉树59.层序遍历二叉树510.叶子结点的数目511.测量二叉树深度5六心得体会6七附录(代码)6二叉树的遍历一引言1.1编写目的1、熟练掌握二叉树的存储结构。2、熟练掌握二叉树基本操作的实现。1.2参考资料数据结构(C语言版);二项目介绍2.1项目简介二叉树()是另一种树型结构,它的特点是每个结点至多只有两棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。开发工具 6.02.2软件运行环境 处理器无要求,32以上内存,硬盘1以上 (R
3、) (R) 系列所有操作系统三需求分析3.1总体需求分析1.二叉树的创建2.二叉树的销毁3.先序遍历二叉树4.中序遍历二叉树5.后序遍历二叉树6.层序遍历二叉树7.统计二叉树中叶子结点的数目8.测量二叉树的深度3.2主界面需求分析设计菜单界面显示所有操作。四总体模块设计1.操作菜单:输出选择界面菜单2.选择菜单:输入数字选择对应操作功能3.二叉树的创建:按先序次序建立一个新的二叉树4.二叉树的销毁:将二叉树销毁5.先序遍历二叉树:先序遍历T,对每个结点函数调用一次且一次。一旦()失败,则操作失败。6.中序遍历二叉树:中序遍历T,对每个结点函数调用一次且一次。一旦()失败,则操作失败。7.后序遍
4、历二叉树:后序遍历T,对每个结点函数调用一次且一次。一旦()失败,则操作失败。8.层序遍历二叉树:层序遍历T,对每个结点函数调用一次且一次。一旦()失败,则操作失败。9.叶子结点的数目:统计二叉树中叶子结点的数目10.测量二叉树深度:测量二叉树的深度五详细设计1.主函数功能说明主函数原型 ()输入按键输入输出无返回值无2.菜单函数功能说明主函数原型 ()输入按键输入输出无返回值无3.二叉树操作菜单功能说明二叉树操作菜单原型 ( )输入输入 0-8数字输出无返回值无4.创建二叉树函数功能说明先序创建二叉树原型 ( )输入无 输出无 返回值二叉树的根地址5.销毁二叉树函数功能说明销毁二叉树原型 (
5、 )输入无 输出无 返回值二叉树的根地址6.先序遍历二叉树功能说明先序遍历二叉树原型 ( T, (*)( e)输入无输出无返回值若遍历成功,则返回,否则返回7.中序遍历二叉树功能说明中序遍历二叉树原型 ( T, (*)( e)输入无输出无返回值若遍历成功,则返回,否则返回8.后序遍历二叉树功能说明后序遍历二叉树原型 ( T, (*)( e)输入无输出无返回值若遍历成功,则返回,否则返回9.层序遍历二叉树功能说明层序遍历二叉树原型 ( T, (*)( e)输入无输出无返回值若遍历成功,则返回,否则返回10.叶子结点的数目功能说明叶子结点的数目原型 ( T)输入无输出叶子结点的数目返回值二叉树首地
6、址11.测量二叉树深度功能说明测量二叉树深度原型 ( T)输入无输出测量二叉树深度返回值二叉树出栈元素地址六心得体会张峻峰:本次二叉树的遍历学习让我了解二叉树存储方式。在建立二叉树时我是采用二叉链表存储结构进行存储的。输入时按先序次序输入二叉树中结点的值,这就要求我们要熟练的掌握二叉树的先序遍历。在写功能函数时,主要采用递归方法,使程序的结构更加简单。在写层序遍历二叉树时,要使用队列进行操作。这就要求我们熟练的掌握队列的操作。在写这一功能函数时,我遇到了一个困难。每当我执行层序遍历二叉树功能时,总是将二叉树中的数值删除了,后来我将形参中的指针传递换成了变量传递,最终解决了这一问题。本次的实验让
7、我更加的了解二叉树的遍历,对二叉树的存储有了更深的理解。瞿子晶:这次的实验写了五个函数,创建,销毁,先序,中序,和测量树的深度,写完后没有运行,因为编译器有点问题。后来和组长开了一个小会,就把我写的代码修改修改,然后合成,还是有用的,感觉很开心吧。虽然比较难都是组长写的,但是吧他也有令我理解他的代码,所以总体而已,较之前进步了。我会继续加油的!七附录(代码) 1 0 1 0 -1 -2 100 10/*二叉树的二叉链表存储方式*/ ; *, *; 左右孩子指针, *;/*队列结构体定义*/ ; * ;, *; ; ;/*/ (); ( ); ( ); ( ); ( e); ( T, (*)(
8、e); ( T, (*)( e); ( T, (*)( e); ( T, (*)( e); ( T); ( T); ( T); ( T); ( *Q); 创建队列 ( *Q); 销毁队列 ( *Q); 判断队列空 ( *Q, e); 入队 ( *Q, e); 出队 () T; T = ; (1) (); (T); () ( 02); (); (n); (t n); (t n); (t *二*叉*树*的*操*作*n); (t n); (t 1: 先序创建二叉树 2: 销毁二叉树 n); (t n); (t 3: 先序遍历二叉树 4: 中序遍历二叉树 n); (t n); (t 5: 后序遍历二叉树 6: 层序遍历二叉树 n); (t n); (t 7: 叶子结点的数目 8: 测量二叉树深度 n); (t n); (t 0: 退出 n); (t n); (t B U G n); (nntt 请选择操作:); ( ) = 0; (1) 输入检测 (, ); (); (a = 0 a = ; 生成根节点 (); 构造左子树 (); 构造右子树 ;/*销毁二叉树*/ ( ) (T ) ; (); (); (T); ;/* ( ) 销毁二叉树 (T ) (); 利用递归 (T ) (); (T); ;*/ ( e) (, e); ;/*
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1