- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验六二叉树的递归遍历及其应用
(第二题)
需求分析
从键盘输入二叉树的先序序列,按照先序建树的方法完成二叉树的创建。
2、从键盘输入一段正确的序列后,按回车键自动生成二叉树,若该序列不能生成一颗二叉树,则程序无法继续进行,只能退出。
3、按层次遍历需要用到队列的功能,故需要加入队列的相关操作。
4、 程序能实现的功能包括:
①初始化二叉树;②创建一棵完整二叉树;③按层次遍历二叉树;④打印各结点的层次;⑤求二叉树的宽度;概要设计
1、二叉树的抽象数据类型定义:
ADT BinaryTree{
数据对象D:D是具有相同特征的数据元素的集合。
数据关系R:
若D=空,则R=空,称BinaryTree为空二叉树;
若D!=空,则R={H},H是如下二元关系:
在D中存在唯一的称为根的数据元素root,它在关系H下无前驱;
若D-{root}!=Φ,则存在D-{root}={D1,Dr},且D1∩Dr=Φ;
若D1!=Φ,则D1中存在唯一元素x1,root,x1∈H,且存在D1上的关系H1包含于H;若Dr!=Φ,则Dr中存在唯一的元素,root,xr∈H,且存在Dr上的的关系Hr包含于H;H={root,,x1,root,xr,H1,Hr};
(D1,{H1})是一棵符合本定义的二叉树,称为根的左子树,(Dr,{Hr})是一棵符合本定义的二叉树,称为根的右子树。
基本操作:
InitBiTree(BT)
操作结果:构造空二叉树
CreateBiTree(BT)
操作结果:建立二叉树
PreOrder(BT)
初始条件:二叉树BT已存在
操作结果:先序遍历
InOrder(BT)
初始条件:二叉树BT已存在
操作结果:中序遍历
PostOrder(BT)
初始条件:二叉树BT已存在
操作结果:后序遍历
TreeWidth(BT)
初始条件:二叉树BT已存在
操作结果:求BT的宽度
GetLevel(BT)
初始条件:二叉树BT已存在
操作结果:按层次遍历求层次
}ADT BinaryTree;
2、队列的抽象数据类型定义相关操作(略)
3、本程序模块结构
主函数模块
void main(){
初始化两颗二叉树;
创建二叉树BT,返回根结点BT;
getchar();
while(继续运行){
目录;
Switch(select){
1. PreOrder Traversal;
2. InOrder Traversal;
3. PostOrder Traversal;
4. LevelOrder Traversal;
5. TreeWidth;
6. Exit;
scanf(%d,select);
}
}
}
详细设计
1、基本数据类型操作
⑴二叉链表的存储结构
typedef char TElemType;
typedef struct BiTNode{TElemType data;struct BiTNode *lchild,*rchild; //左右孩子指针
}BiTNode,*BiTree;
调试分析
1、求结点层次要在按层次遍历时将其层级计算出来并作为队列元素的一项跟随结点入队,输出结点时再一同输出层次,计算其层次时,要注意先后入队元素之间的关系。
2、求二叉树宽度时也是通过按层次遍历完成的,通过得到结点的层次后,再遍历结点,同一层次结点数最多则该层结点数即为二叉树宽度。五、用户说明及测试结果七、附录(源代码及部分注释)
#include stdio.h
#include stdlib.h
#include conio.h
#include string.h
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW -1
#define INFEASIBLE -2
#define Max_Tree_SIZE 20//最大结点数
#define STACK_INIT_SIZE 100
#define STACKINCRENT 10
#define MAXQSIZE 100
typedef int Status;
typedef char TElemType;
typedef struct BiTNode{TElemType data;struct BiTNode *lchild,*rchild; //左右孩子指针
}BiTNode,*BiTree;
//定义队列中数据元素
typedef struct{
BiTree Bi;
int level;
}QElemType;
//队列模块
typedef struct Queue{
QElemType *base;
int fro
您可能关注的文档
最近下载
- DL∕T 5168-2023表A.5 分部工程质量控制资料核查记录.pdf VIP
- 大班数学活动《8的分解组成》PPT课件.ppt
- 【一模】2025年广东省2025届高三高考模拟测试 (一) 数学试卷(含官方答案及解析 ).docx
- 13S201 室外消火栓及消防水鹤安装.docx VIP
- 主题班会课件-师恩难忘-学子感恩-致敬恩师主题班会.ppt
- GB50327-2001住宅装饰装修工程施工规范.docx
- World怎么在参考文献后面添加CrossRef.pdf VIP
- 江苏省房屋建筑和市政基础设施工程标准施工招标文件(适用于资格后审).doc VIP
- 八下英语U3词性变化.docx
- 《机械原理》期末考试试题及答案.docx
文档评论(0)