数据结构课程设计实验报告二叉树的实现.docx

上传人:b****6 文档编号:5808159 上传时间:2023-01-01 格式:DOCX 页数:21 大小:32.53KB
下载 相关 举报
数据结构课程设计实验报告二叉树的实现.docx_第1页
第1页 / 共21页
数据结构课程设计实验报告二叉树的实现.docx_第2页
第2页 / 共21页
数据结构课程设计实验报告二叉树的实现.docx_第3页
第3页 / 共21页
数据结构课程设计实验报告二叉树的实现.docx_第4页
第4页 / 共21页
数据结构课程设计实验报告二叉树的实现.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

数据结构课程设计实验报告二叉树的实现.docx

《数据结构课程设计实验报告二叉树的实现.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计实验报告二叉树的实现.docx(21页珍藏版)》请在冰豆网上搜索。

数据结构课程设计实验报告二叉树的实现.docx

数据结构课程设计实验报告二叉树的实现

《数据结构》

实验报告

 

题目:

_二叉树的实现

学号:

_______

姓名:

_______

 

东南大学成贤学院计算机系

 

实验题目

一、实验目的

1.掌握二叉树的基本操作,理解递归算法。

二、实验内容

1.将下图所示二叉树采用二叉链表进行存储,然后进行各种操作测试。

三、实验步骤

1.启动:

开始菜单→程序→MicrosoftVisualStudio6.0→

2.建立工程:

文件(File)→新建(new)→在弹出的对话框中选择工程标签(Project)→选中选项:

Win32ConsoleApplication(不能选别的)→输入工程名(ProjectName)→选择工程的存放位置(Location)→单击“确定”按钮(OK)→在弹出的对话框中选中选项:

AnEmptyProject→单击“完成”按钮(Finish)→在弹出的对话框中单击“确定”按钮(OK)。

3.创建头文件:

文件(File)→新建(new)→在弹出的对话框中选择文件标签(Files)→选中选项:

C/C++HeaderFile→输入头文件名(此处定义为“”)→单击“确定”按钮(OK)。

内容如下:

//二叉树结点类模板

template

structBinTreeNode

{

//数据成员:

ElemTypedata;//数据域

BinTreeNode*leftChild;//左孩子

BinTreeNode*rightChild;//右孩子

};

4.创建头文件:

文件(File)→新建(new)→在弹出的对话框中选择文件标签(Files)→选中选项:

C/C++HeaderFile→输入头文件名(此处定义为“”)→单击“确定”按钮(OK)。

定义了链队的类模板,代码如下:

#ifndef__BINNARY_TREE_H__

#define__BINNARY_TREE_H__

//二叉树类模板

template

classBinaryTree

{

private:

//二叉树的数据成员:

BinTreeNode*root;

//二叉树的私有函数:

voidPreOrderHelp(BinTreeNode*r);//先序遍历

voidInOrderHelp(BinTreeNode*r);//中序遍历

voidPostOrderHelp(BinTreeNode*r);//后序遍历

voidCreat(BinTreeNode*r,

intflag,ElemTypeempty,ElemTypeend);

//递归创建子树

BinTreeNode*GetRoot();//返回根指针

BinTreeNode*Locate(BinTreeNode*r,ElemTypee);//查找元素值为e的结点,返回指针.

BinTreeNode*LeftChild(ElemTypee);

//定位指定元素的左孩子,返回其指针。

BinTreeNode*Parent(BinTreeNode*r,ElemTypee);//定位指定元素的父结点

BinTreeNode*LeftSibling(ElemTypee);

//定位指定元素的左兄弟

intSize(BinTreeNode*r);

intDepth(BinTreeNode*r);

intLeaf(BinTreeNode*r);//统计并返回叶子结点个数

voidClear(BinTreeNode*r);

voidDisplayTreeeHelp(BinTreeNode*r,intlevel);

//按树状形式显示以r为根的二叉树,level为层次数,可设根结点的层次数为1

public:

//二叉树公共方法声明:

BinaryTree( );//无参数的构造函数模板

voidCreateBiTree();//构造二叉树

BinTreeNode*GetRoot();//返回二叉树的根

voidInOrder();//二叉树的中序遍历

voidPreOrder();//二叉树的先序遍历

voidPostOrder();//二叉树的后序遍历

voidLevelOrder();//按层遍历

intLocate(ElemTypee);//查找元素值为e的结点。

intGetLeft(ElemTypee,ElemType&c);

//读取指定元素的左孩子

intGetParent(ElemTypee,ElemType&f);

//读取指定元素的父元素

intGetLeftSibling(ElemTypee,ElemType&s);

//读取指定元素的左兄弟

intInsertChild(ElemTypee,ElemTypex,ElemTypey);

//为指定元素e插入左、右孩子

intSetElem(ElemTypee,ElemTypex);

//更新指定元素

intSize();

intDepth();

intLeaf();//统计并返回叶子结点个数

virtual~BinaryTree();//销毁二叉树

voidDisplayTree();

};

函数实现由学生自己完成

#endif

5.创建源程序文件main.cpp:

文件(File)→新建(new)→在弹出的对话框中选择文件标签(Files)→选中选项:

C++SourceFile→输入源程序文件名(main)→单击“确定”按钮(OK)。

文件内容如下:

#include"binary_tree.h"//二叉树类

intmain(void)

{

利用swtich构造菜单,对二叉树操作进行测试。

(初始化,构造二叉树,图形显示,前序,中序,后序遍历结果,求结点个数,二叉树深度,叶子结点树,查找结点,找指定结点的左孩子,双亲,左兄弟,插入新的左、右孩子。

}

注意:

1.在编程过程中注意及时保存编写内容。

四、实验结果

1.的代码

2.的代码

3.运行结果截图(可以有多张)

1、

#pragmaonce

#include””

usingnamespacestd;

//二叉树类模板

template

classBinaryTree

{

private:

//二叉树的数据成员:

BinTreeNode*root;

//二叉树的私有函数:

voidPreOrderHelp(BinTreeNode*r);//先序遍历

voidInOrderHelp(BinTreeNode*r);//中序遍历

voidPostOrderHelp(BinTreeNode*r);//后序遍历

voidCreat(BinTreeNode*r,

intflag,ElemTypeempty,ElemTypeend);

//递归创建子树

BinTreeNode*GetRoot();//返回根指针

BinTreeNode*Locate(BinTreeNode*r,ElemTypee);//查找元素值为e的结点,返回指针.

BinTreeNode*LeftChild(ElemTypee);

//定位指定元素的左孩子,返回其指针。

BinTreeNode*Parent(BinTreeNode*r,ElemTypee);//定位指定元素的父结点

BinTreeNode*LeftSibling(ElemTypee);

//定位指定元素的左兄弟

intSize(BinTreeNode*r);

intDepth(BinTreeNode*r);

intLeaf(BinTreeNode*r);//统计并返回叶子结点个数

voidClear(BinTreeNode*r);

voidDisplayTreeeHelp(BinTreeNode*r,intlevel);

//按树状形式显示以r为根的二叉树,level为层次数,可设根结点的层次数为1

intsize;

public:

//二叉树公共方法声明:

BinaryTree();//无参数的构造函数模板

voidCreateBiTree();//构造二叉树

//BinTreeNode*GetRoot();//返回二叉树的根

voidInOrder();//二叉树的中序遍历

voidPreOrder();//二叉树的先序遍历

voidPostOrder();//二叉树的后序遍历

voidLevelOrder();//按层遍历

intLocate(ElemTypee);//查找元素值为e的结点。

intGetLeft(ElemTypee,ElemType&c);

//读取指定元素的左孩子

intGetParent(ElemTypee,ElemType&f);

//读取指定元素的父元素

intGetLeftSibling(ElemTypee,ElemType&s);

//读取指定元素的左兄弟

intInsertChild(ElemTypee,ElemTypex,ElemTypey);

//为指定元素e插入左、右孩子

intSetElem(ElemTypee,ElemTypex);

//更新指定元素

intSize();

intDepth();

intLeaf();//统计并返回叶子结点个数

virtual~BinaryTree();//销毁二叉树

voidDisplayTree();

};

template

voidBinaryTree:

:

PreOrderHelp(

BinTreeNode*r)//private

{

if(r!

=NULL)

{

cout<data<<"";//访问根结点

PreOrderHelp(r->leftChild);//遍历左子树

PreOrderHelp(r->rightChild);//遍历右子树

}

}

template

voidBinaryTree:

:

PreOrder()//public

{

PreOrderHelp(root);

}

template

voidBinaryTree:

:

InOrderHelp(

BinTreeNode*r)//private

{

if(r!

=NULL)

{

InOrderHelp(r->leftChild);//遍历左子树

cout<data<<"";//访问根结点

InOrderHelp(r->rightChild);//遍历右子树

}

}

template

voidBinaryTree:

:

InOrder()//public

{

InOrderHelp(root);

}

template

voidBinaryTree:

:

PostOrderHelp(

BinTreeNode*r)//private

{

if(r!

=NULL)

{

PostOrderHelp(r->leftChild);//遍历左子树

PostOrderHelp(r->rightChild);//遍历右子树

cout<data<<"";//访问根结点

}

}

template

voidBinaryTree:

:

PostOrder()//public

{

PostOrderHelp(root);

}

template

voidBinaryTree:

:

LevelOrder()

{

LinkQueue*>q;

BinTreeNode*t=root;

if(t!

=NULL)(t);//如果根非空,则入队

while(!

())

{

(t);

cout<data<<"";//

if(t->leftChild!

=NULL)//左孩子非空

(t->leftChild);//左孩子入队

if(t->rightChild!

=NULL)//右孩子非空

(t->rightChild);//右孩子入队

}

}

template

BinaryTree:

:

BinaryTree()

{

root=NULL;

}

template

voidBinaryTree:

:

CreateBiTree()

{

BinTreeNode*r;

ElemTypeend,empty,x;

cout<<"按先序序列的顺序输入一棵二叉树"<

cout<<"输入的结束标志是:

";

cin>>end;

cout<<"输入的空结点标志是:

";

cin>>empty;

cout<<"请开始输入:

"<

cin>>x;

r=newBinTreeNode;

r->data=x;

r->leftChild=r->rightChild=NULL;

root=r;

Creat(r,0,empty,end);//创建根结点的左子树

Creat(r,1,empty,end);//创建根结点的右子树

}

template

voidBinaryTree:

:

Creat(BinTreeNode*r,intflag,ElemTypeempty,ElemTypeend)

{

BinTreeNode*p;ElemTypex;

cin>>x;

if(x!

=end&&x!

=empty)

{

p=newBinTreeNode;p->data=x;

p->leftChild=p->rightChild=NULL;

if(flag==0)r->leftChild=p;//p为左子树

elser->rightChild=p;//p为右子树

size++;

Creat(p,0,empty,end);//递归创建左子树

Creat(p,1,empty,end);//递归创建右子树

}

}

template

BinTreeNode*BinaryTree:

:

GetRoot()

{

returnroot;

}

template

BinTreeNode*BinaryTree:

:

Locate(BinTreeNode*r,ElemTypee)//private

{

if(r==NULL)returnNULL;

if(r->data==e)returnr;

BinTreeNode*p=Locate(r->leftChild,e);

if(p==NULL)p=Locate(r->rightChild,e);

returnp;

}

template

intBinaryTree:

:

Locate(ElemTypee)//public

{

if(Locate(root,e)==NULL)

returnfalse;

else

returntrue;

}

template

BinTreeNode*BinaryTree

:

:

LeftChild(ElemTypee)//private 

{

BinTreeNode*ep=Locate(root,e);

if(ep==NULL)returnNULL;//找不到结点e

if(ep->leftChild==NULL)//e无左孩子

returnNULL;

returnep->leftChild;//返回e左孩子的指针

}

template

intBinaryTree:

:

GetLeft(ElemTypee,ElemType&c)//Public

{

BinTreeNode*p=LeftChild(e);

if(p==NULL)returnfalse;//e无左孩子

c=p->data;

returntrue;

}

template

BinTreeNode*BinaryTree:

:

Parent(BinTreeNode*r,ElemTypee)//private

{

BinTreeNode*p;

if(r==NULL)returnNULL;

if((r->leftChild!

=NULL&&r->leftChild->data==e)||

(r->rightChild!

=NULL&&r->rightChild->data==e))

returnr;//r是e的父结点,返回结点r的指针

p=Parent(r->leftChild,e);//递归调用r的左子树

if(p==NULL)p=Parent(r->rightChild,e);

returnp;

}

template

intBinaryTree:

:

GetParent(ElemTypee,ElemType&f)//public

{

if(root==NULL||root->data==e)

returnfalse;

BinTreeNode*p=Parent(root,e);

if(p==NULL)returnfalse;//树中无元素e

f=p->data;

returntrue;

}

template

BinTreeNode*BinaryTree:

:

LeftSibling(ElemTypee)//private

{

if(root->data==e)returnNULL;

BinTreeNode*p=Parent(root,e);

if(p==NULL)returnNULL;//无e结点

if(p->leftChild->data==e)//e是其父亲的左孩子

returnNULL;

returnp->leftChild;//返回e的左兄弟指针

}

template

intBinaryTree:

:

GetLeftSibling(ElemTypee,ElemType&s)

{

if(root->data==e)returnfalse;//根结点无兄弟

BinTreeNode*p=LeftSibling(e);

if(p==NULL)returnfalse;//e无左兄弟

s=p->data;

returntrue;

}

template

intBinaryTree:

:

InsertChild(ElemTypee,ElemTypex,ElemTypey)

{

BinTreeNode*ep,*xp,*yp;

ep=Locate(root,e);//定位元素e

if(ep==NULL)returnfalse;//找不到元素e

xp=newBinTreeNode;

xp->data=x;

xp->rightChild=NULL;

yp=newBinTreeNode;

yp->data

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1