- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《数据结构》实验报告
姓名: 学号:
班级: 计算机0906班 专业: 计算机科学与技术
报告日期: 2011 年 5 月 20 日
实验三
一、问题描述与分析
1. 设某二叉树数据元素类型为整型,以二叉链表为存储结构。试编程实现:
⑴ 生成一棵二叉树.
⑵ 用递归算法、非递归算法实现二叉树的遍历;
⑶ 求度分别为0、1、2的结点的数目,分别用递归算法、非递归算法实现;
⑷ 按层次遍历二叉树(提示:使用一个队列实现);
*⑸ 求二叉树的高度(深度);
*⑹ 判断是否为完全二叉树,输出Yes!/No!;
*⑺ 交换每个结点的左右子树;
*⑻ 对交换左右子树后的二叉树作中序遍历。
*⑼ 求某结点的祖先集合。
⑽ 显示二叉树
2.分析
先创建一棵二叉树,输入数据元素,再根据题目要求编写相应程序,以实现对二叉树的遍历、求结点数目、求高度、判断是否为完全二叉树、交换左右子树、求祖先集合,输出显示等操作。可以借助队列等数据结构。
二、数据结构与算法设计
1.数据结构:
typedef int Status;
typedef struct BiTNode{/*二叉树的二叉链表存储表示*/
int data;
struct BiTNode *lchild,*rchild;
}BiTNode;
2.算法
⑴ 生成一棵二叉树.
按先序序列输入int型数据元素,以0代表空值,给二叉树分配存储空间,元素以二叉链表的形式存储,给出根结点。
⑵ 用递归算法、非递归算法实现二叉树的遍历;
传递根结点,按中序序列分别以递归方式和非递归方式遍历左子树和右子树,并输出所有元素。
⑶ 求度分别为0、1、2的结点的数目,分别用递归算法、非递归算法实现;
分别求出每个结点的度,然后按度统计,并输出统计结果。
⑷ 按层次遍历二叉树(提示:使用一个队列实现);
声明一个树类型指针和一个树类型指针队列,以队列按层次存放指向二叉树各结点的指针,以树类型指针遍历队列,输出按层次排列的二叉树元素。
*⑸ 求二叉树的高度(深度);
用递归算法分别求二叉树左子树的高度h1和右子树的高度h2,比较h1和h2的大小,取较大的一个,加1,即为二叉树的高度。
*⑹ 判断是否为完全二叉树,输出Yes!/No!;
将二叉树的元素按顺序存入一个数组s,判断元素值是否为0,当出现第一个0后,再判断后面的元素,若全为0,则是完全二叉树,否则不是完全二叉树。
*⑺ 交换每个结点的左右子树;
用递归算法一步步的交换各个结点的左右子树。
*⑻ 对交换左右子树后的二叉树作中序遍历。
先用(7)中的算法交换每个结点的左右子树,在用(2)中的算法对交换后的二叉树作中序遍历。
*⑼ 求某结点的祖先集合。
先找到该结点的位置,找到后输出其祖先集合。
⑽ 显示二叉树
按先序序列遍历输出二叉树的所有元素。
三、算法复杂度分析
⑴ 生成一棵二叉树.
生成一棵含n个结点的二叉树需要分配存储空间n次,故其算法复杂度为O(n)。
⑵ 用递归算法、非递归算法实现二叉树的遍历;
遍历二叉树算法中的基本操作是访问结点,故对含n个结点的二叉树,其算法复杂度为O(n)。
⑶ 求度分别为0、1、2的结点的数目,分别用递归算法、非递归算法实现;
此函数要计算所有元素的度,故其算法复杂度为O(n)。
⑷ 按层次遍历二叉树(提示:使用一个队列实现);
不论按哪种方式进行二叉树的遍历,其基本操作都是访问结点,故对含n个结点的二叉树,其算法复杂度为O(n)。
*⑸ 求二叉树的高度(深度);
求二叉树的高度要遍历一遍整个二叉树,故其算法复杂度为O(n)。
*⑹ 判断是否为完全二叉树,输出Yes!/No!;
判断是否为完全二叉树的基本操作是将数据元素依次存入一个一维数组然后对数据进行判断(0代表空树),故其算法复杂度为O(n)。
*⑺ 交换每个结点的左右子树;
n个结点要交换n次左右子树,故其算法复杂度为O(n)。
*⑻ 对交换左右子树后的二叉树作中序遍历。
交换左右子树的算法复杂度为O(n),中序遍历的算法复杂度也为O(n) ,故次算法的算法复杂度为O(n)。
*⑼ 求某结点的祖先集合。
找结点的位置需遍历二叉树,故其算法复杂度为O(n)。
⑽ 显示二叉树
此函数要遍历一次二叉树,故其算法复杂度为O(n)。
四、测试计划
1.编写目的
加深对二叉树的二叉链表存储结构和其算法思想的理解。
2.开发及运行环境
TC 2.01。
3.测试截图
(1)菜单界面
(2)输入数据,创建
文档评论(0)