二叉树实验报告及代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
重庆交通大学综合性设计性实验报告
姓名姚远学号 631106060113 班级:计信息一班
实验项目名称:二叉树
实验项目性质:设计性实验
实验所属课程:数据结构
实验室(中心): 407机房
指导教师:鲁云平
实验完成时间: 2013 年 5 月 10 日
一、实验目的
1. 建立二叉树
2. 计算结点所在的层次
3.统计结点数量和叶结点数量
4.计算二叉树的高度
5.计算结点的度
6.找结点的双亲和子女
7.二叉树的遍历
8.二叉树的输出等等
二、实验内容及要求
1.二叉树的结点结构,二叉树的存储结构由学生自由选择和设定
2.实验完成后上交打印的实验报告,报告内容与前面所给定的实验模板相同
3.将实验报告电子版和源代码在网络教学平台提交
三、实验设备及软件
VISUAL C++软件
四、设计方案
㈠题目(老师给定或学生自定)
二叉树的应用
㈡设计的主要思路
在计算机科学中,二叉树是每个结点最多有两个子树的有序树。通常子树的根被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用作二叉查找树和二叉堆或是二叉排序树。二叉树的每个结点至多只有二棵子树(不存在出度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2的i -1次方个结点;深度为k的二叉树至多有2^(k) -1个结点;对任何一棵二叉树T,如果其终端结点数(即叶子结点数)为n0,出度为2的结点数为n2,则n0 =n2 + 1。
㈢主要功能
实现二叉树的各项操作。
五、主要代码
#include
#include
#include
typedef struct BinTreeNode //二叉树结点类定义
{
char data;
//数据域
BinTreeNode *leftChild, *rightChild; //左子女、右子女链域
}*BTree;
BinTreeNode *p,*q,*f;
int NodeNum,Leaf;
int NodeDu,nodeloc=1;
void CreateBinTree(BTree &T);
void preOrder(BTree T);
void inOrder(BTree T);
void postOrder(BTree T);
int TreeNodes(BTree T);
int LeafNodes(BTree T);
int TreeNodedu(BTree T,char ch);
void NodeLoc(BTree T,char c,int nodeloc);
int Height(BTree T);
BTree Parent(BTree T,char c);
BTree NodeRC(BTree T,char c);
BTree NodeLC(BTree T,char c);
void CreateBinTree(BTree &T)
{
char item;
cin>>item;
if ( item!='#' )
{
T=(BTree )malloc(sizeof(BinTreeNode));
T->data=item;
if (T == NULL)
{
cerr << "存储分配错误!" << endl;
exit (1);
}
CreateBinTree (T->leftChild);
//递归建立左子树
CreateBinTree (T->rightChild); //递归建立右子树
}
else
T= NULL;
};
void inOrder(BTree T)
{
if (T != NULL)
{
inOrder (T->leftChild); //遍历左子树
cout<
inOrder (T->rightChild); //遍历右子树
}
};
void preOrder(BTree T)
{
if (T != NULL)
{
cout<
preOrder (T->leftChild); //遍历左子树
preOrder (T->rightChild); //遍历右子树
}
};
void postOrder(BTree T)
{
if (T != NULL )
{
postOrder(T->leftChild);
//遍历左子树
postOrder(T->rightChild);
//遍历右子树
cout<
}
};
int TreeNodes(BTree T) //利用二叉树后序遍历算法计算二叉树的结点个数
{
int hl,hr;
if(T != NULL)
{
hl=TreeNodes(T->leftChild);
hr=TreeNodes(T->rightChild);
NodeNum=NodeNum+1;