二叉树实验报告及代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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<data<<" ";

inOrder (T->rightChild); //遍历右子树

}

};

void preOrder(BTree T)

{

if (T != NULL)

{

cout<data<<" ";

preOrder (T->leftChild); //遍历左子树

preOrder (T->rightChild); //遍历右子树

}

};

void postOrder(BTree T)

{

if (T != NULL )

{

postOrder(T->leftChild);

//遍历左子树

postOrder(T->rightChild);

//遍历右子树

cout<data<<" ";

}

};

int TreeNodes(BTree T) //利用二叉树后序遍历算法计算二叉树的结点个数

{

int hl,hr;

if(T != NULL)

{

hl=TreeNodes(T->leftChild);

hr=TreeNodes(T->rightChild);

NodeNum=NodeNum+1;

相关文档
最新文档