一、实验目的和要求 (源码在最后)
要求:
两种及以上存储结构(建议 顺序存储结构和链式存储结构各一)、两种及以上方法(建议 递归遍历和层次遍历方法各一)。分析各代码性能。
抽象数据类型(二叉树)独立模块实现。
其它要求同作业-01要求。
二、实验环境
软件环境:visual stdio 2017
硬件环境:①CPU:Intel(R)Core(TM)i7-8565U CPU @1.80Ghz
②内存:8.0GB
三、实验内容
设计算法并实现求解二叉树高度(深度)。
四、实验过程
4.1 任务定义和问题分析
本次实验需要解决的问题主要为一下三个问题:数据结构的构建,递归遍历的实现,层次遍历的实现。
4.2 数据结构的选择和概要设计
方案一:
顺序存储结构,用一个数组记录二叉树结点值,数组下标记录二叉树编号(下标从1开始用)。递归遍历直接递归,层次遍历直接按层以编号顺序将编号与值一并输出。最终求得高度。
方案二:
链式存储结构,用结构体记录二叉树各结点。递归遍历直接递归,层次遍历以队列为辅助工具,不断入队,出队,达到层次遍历的目的。最终求得高度。
4.3 详细设计
方案一:
①数据结构的构建:
设计成一个class,其中负责记录结点值的数组,其下标为1记录根值,一般的,对于整数i,第2i位(如果存在)为第i位左子结点,2i+1位(如果存在)为第i位右子结点。
②递归遍历的实现:
设计一个递归函数,传入参数为结点标记值i(缺省值为1)其终止条件为:第i位对应结点不存在,返回0。其他情况每次返回各子树的左子树长度和右子树长度的最大值+1。
int GetlengthByRecursion(int i = 1)
{
if (i > totalnum || array[i] == ' ') return 0;
return max(GetlengthByRecursion(2 * i), GetlengthByRecursion(2 * i + 1)) + 1;
}
③层次遍历的实现:
循环输出各层,即输出各层数组值,同时得到二叉树的高度。
方案二:
①数据结构的构建:
设计成一个struct,内有data记录结点值&#