二叉树的基本操作实现及其应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中原工学院软件学院
实验报告
实验项目名称二叉树的基本操作实现及其应用课程名称数据结构
学生姓名
学生学号
所在班级
学科专业
任课教师
完成日期
一、实验目的
1.熟悉二叉树结点的结构和对二叉树的基本操作。
2.掌握对二叉树每一种操作的具体实现。
3.学会利用递归方法编写对二叉树这种递归数据结构进行处理的算法。
4.会用二叉树解决简单的实际问题。
二、实验内容
题目一设计程序实现二叉树结点的类型定义和对二叉树的基本操作。
该程序包括二叉树结构类型以及每一种操作的具体的函数定义和主函数。
1 按先序次序建立一个二叉树,
2按(A:先序 B:中序 C:后序)遍历输出二叉树的所有结点
以上比做,以下选做
3求二叉树中所有结点数
4求二叉树的深度
三、实验步骤
㈠、数据结构与核心算法的设计描述
typedef struct node
{
char data;
struct node *lchild,*rchild;
}BinTNode, *BinTree; //定义二叉树的指针
BinTree CreatBinTree(void)//先序遍历算法创建二叉树
void Preorder(BinTree T)先序遍历
void Inorder(BinTree T)中序遍历
void Postorder(BinTree T)后序遍历
int TreeDepth(BinTree T)求深度
㈡、函数调用及主函数设计
㈢程序调试及运行结果分析
如结果所示,该程序实现了先序创建二叉树,先序遍历,中序遍历,后序遍历及求深度,求节点数等功能。
(四)实验总结
该实验主要是对二叉树的基本操作进行了训练。在实验的过程中,我熟悉了二叉树的构造方法,以及二叉树的一些操作,通过此次实验,我对二叉树的基本构造方法以及怎么使用递归的方法有了更深的理解。
四、主要算法流程图及程序清单
1、主要算法流程图
2、程序清单
#include
#include
#include
typedef struct node
{
char data;
struct node *lchild,*rchild;
}BinTNode, *BinTree; //定义二叉树的指针
BinTree CreatBinTree(void)//先序遍历算法创建二叉树{
BinTree T;
char ch;
if((ch=getchar())==' ')
return(NULL);
else{
T=(BinTNode *)malloc(sizeof(BinTNode));
T->data=ch;
T->lchild=CreatBinTree(); //构造左子树T->rchild=CreatBinTree(); //构造右子树return(T);
}
}
//先序遍历
void Preorder(BinTree T)
{
if(T){
printf("%c",T->data);
Preorder(T->lchild);
Preorder(T->rchild);
}
}
//中序遍历
void Inorder(BinTree T)
{
if(T){
Inorder(T->lchild);
printf("%c",T->data);
Inorder(T->rchild);
}
}
//后序遍历
void Postorder(BinTree T){
if(T){
Postorder(T->lchild);
Postorder(T->rchild);
printf("%c",T->data);
}
}
int TreeDepth(BinTree T)
{
int hl,hr,max;
if(T){
hl=TreeDepth(T->lchild);
hr=TreeDepth(T->rchild);
max=hl>hr? hl:hr;
NodeNum=NodeNum+1;
return(max+1);
}
else return(0);
}
Int TreeNode(BinTree T)
{
int NodeNum=0;
if(T){
TreeDepth(T->lchild);
TreeDepth(T->rchild);
NodeNum=NodeNum+1;
return(NodeNum);
}
else
return 0;
}
//主函数
void main()
{
BinTree root;
int i,depth,NodeNum;
printf("创建二叉树;输入节点序列(用空格键代表空节点):\n");
root=CreatBinTree();
printf("二叉树创建成功!\n\n"); //创建二叉树,返回根结点
printf("\t\t********** 选择操作 ************\n");
printf("\t\t1: 先序遍历\n");
printf("\t\t2: 中序遍历\n");
printf("\t\t3: 后序遍历\n");
printf("\t\t4: 求树的深度,节点数\n");
printf("\t\t0: 结束\n");
printf("\t\t*******************************\n");