树与二叉树的转换及二叉树的遍历_设计报告.docx
《树与二叉树的转换及二叉树的遍历_设计报告.docx》由会员分享,可在线阅读,更多相关《树与二叉树的转换及二叉树的遍历_设计报告.docx(10页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、树与二叉树的转换及二叉树的遍历_设计报告 目录 一、设计目的 二、问题描述 三、需求分析 四、概要设计 五、详细设计 六、调试分析 七、用户使用说明 八、测试结果 九、总结及分析 十、参考文献 1.设计目的 通过课程设计,巩固所学的理论知识,培养综合运用所学知识解决实际问题的能力。根 据实际问题的具体情况,结合数据结构课程中的基本理论和基本算法,正确分析出数据的逻 辑结构,合理地选择相映的存储结构,并能设计出解决问题的有效算法。 2.问题描述 要求:91)设计单向链表,实现二叉树的生成。 (2)实现对二叉树的遍历查询; (3)实现对二叉树叶节点的增加; 3.需求分析 本程序的功能是对任意二叉树
2、进行递归前序遍历和后序遍历,用栈实现非递归的前序、 和后序遍历,还有对树的层序遍历以及树与二叉树的转换。 本程序要求用户以字符输入,若要实现终端结点,最后以回车键建入数据。 本程序的结果将依次打印出递归前序遍历和后序遍历,用栈实现非递归的前序和中序遍 历和后序遍历,和线索化层序遍历,输入树及树传换成二叉树。 4.概要设计 4.1.二叉树创建 用链表实现创建一个树结点的结构体,从键盘输入数据,存入数组。把下标为2*i+1 的值存入左孩子,为2*i+2的存入右孩子。 BiNode creat(),BiNode stree_creat(char *a,int k)。 开始 Y 参数数组是否空或 N
3、把数组的值赋给结点的数 返回空指针 递归的给左子树赋值参数变为a2i+1 递归的给右子树赋值参数变为a2i+2 返回根指针 结束 图 1、二叉树的创建 4.2先序遍历二叉树的递归算法 若二叉树为空,则空操作;否则(1)访问根结点;(2)先序遍历左子树;(3)先序遍历右子树。void PreOrder(BiNode root)。 开始 Y 判断结点是否 N 访问根结点 按前根遍历方式 遍历左子树 按前根遍历方式遍 历左子树 结束 图2、前序递归遍历 4.3.中序遍历二叉树的递归算法 若二叉树为空,则空操作;否则(1)中序遍历左子树;(2)访问根结点;(3)中序遍历右子树。void InOrder
4、(BiNode root)。 开始 Y 判断结点是否空 N 按中根遍历方式遍 历左子树 访问根结点 按中根遍历方式遍 历右子树 结束 图3、中序递归遍历 4.4.后序遍历二叉树的递归算法 若二叉树为空,则空操作;否则(1)后序遍历左子树;(2)后序遍历右子树。(3)访问根结点;void PostOrder(BiNode root)。 开始 Y 判断结点是否 N 按后根遍历方式遍 历左子树 按后根遍历方式遍 历右子树 访问根结点 结束 图4、后序递归遍历 5.详细设计 源程序: 6.调试分析 二叉树遍历中用到的最重要的一个思想就是递归调用,这次作业使我们对递归有了深入的理解,尤其是对退回上一层后
5、应执行的语句和结点位置的丝路更加清晰。程序调试比较顺利。 用栈同样可以实现二叉树的遍历,这是我们认识到解决一额问题可以由多种不同的途径,应随时将以前学过的只是灵活应用起来,解决新问题。在使用栈结构时,为了方便,我才用了二叉树结构,将其与链式栈结合起来。 因为遍历二叉树的基本操作是访问结点,所以无论哪一种遍历方式,对含有n个结点的二叉树,其时间复杂度为O(n),所需辅助空间最大容量为树的深度,最坏为n,所以空间 复杂度为O(n)。 因该程序对应不同的遍历定义了不同的结构,使每种结构的通用性降低,可以往在递归和非递归中使用同一种结构这一方面做进一步的思考。 6.1 测试目的 测试该程序是否完成所有
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二叉 转换 遍历 设计 报告
限制150内