数据结构二叉树实践报告1.docx

上传人:b****0 文档编号:545656 上传时间:2022-10-11 格式:DOCX 页数:8 大小:53.39KB
下载 相关 举报
数据结构二叉树实践报告1.docx_第1页
第1页 / 共8页
数据结构二叉树实践报告1.docx_第2页
第2页 / 共8页
数据结构二叉树实践报告1.docx_第3页
第3页 / 共8页
数据结构二叉树实践报告1.docx_第4页
第4页 / 共8页
数据结构二叉树实践报告1.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

数据结构二叉树实践报告1.docx

《数据结构二叉树实践报告1.docx》由会员分享,可在线阅读,更多相关《数据结构二叉树实践报告1.docx(8页珍藏版)》请在冰豆网上搜索。

数据结构二叉树实践报告1.docx

数据结构二叉树实践报告1

成绩:

实验报告

课程名称:

数据结构实验

实验项目:

二叉树的建立及遍历

姓名:

专业:

班级:

学号:

计算机科学与技术学院

实验教学中心

2017年11月17日

实验项目名称:

二叉树的建立及遍历

一、实验目的:

(1)熟练掌握二叉树的建立方法;

(2)熟练掌握二叉树的遍历算法;

(3)掌握二叉树的应用算法。

二、实验内容:

(1)编写算法建立一棵二叉树的二叉链表;

(2)输出二叉树的三种遍历序列,包括递归算法、非递归算法;

(3)编写算法统计二叉树结点数、叶子数、深度。

三、实验结果分析

 

四、实验操作步骤

按先序遍历顺序输入建树,空节点输入#代替,采用递归建树。

输出结果为该树按先序遍历、中序遍历、后序遍历的顺序序列。

并计算输出该树的深度、叶子节点数量、总结点数量

之后按层序遍历顺序输入建立完全二叉树,采用非递归建树。

输出结果为该树按先序遍历、中序遍历、后序遍历的顺序序列。

并计算输出该树的深度、叶子节点数量、总结点数量

五、源代码

#include

#include

#include

#include

usingnamespacestd;

//二叉树定义

typedefcharElementType;

typedefstructBiTreeNode

{

ElementTypedata;

structBiTreeNode*lchild;

structBiTreeNode*rchild;

}BiTreeNode,*BiTree;

 

//递归的建立一棵二叉树

//输入为二叉树的先序序列

voidcreateBiTree(BiTree&T)

{

chardata;

data=getchar();

if(data=='#')

{

T=NULL;

}

else

{

T=newBiTreeNode;

T->data=data;

createBiTree(T->lchild);

createBiTree(T->rchild);

}

}

voidcreatBiTree_2(BiTree&rt,intn)

{

charroot[2];

scanf("%s",root);

rt=newBiTreeNode;

rt->data=root[0];

for(inti=2;i<=n;i++)

{

BiTreeNode*T=rt;

chartmp[2];

intnum=0,a[16];

scanf("%s",tmp);

intii=i;

while(ii)

{

a[num++]=ii%2;

ii/=2;

}

BiTreeNode*node=newBiTreeNode;

node->data=tmp[0];

node->rchild=NULL;

node->lchild=NULL;

for(intj=num-2;j>0;j--)

if(a[j])T=T->rchild;

elseT=T->lchild;

if(a[0])T->rchild=node;

elseT->lchild=node;

}

}

intNodenum(BiTreeNode*root)//二叉树节点数目

{

if(root==NULL)return0;

elsereturn1+Nodenum(root->lchild)+Nodenum(root->rchild);

}

//递归销毁一棵二叉树

voiddestroyBiTree(BiTree&T)

{

if(T)

{

destroyBiTree(T->lchild);

destroyBiTree(T->rchild);

deleteT;

T=NULL;

}

}

//递归先序遍历二叉树

voidpreOrderTraverse(constBiTree&T)

{

if(T)

{

cout<data<<"";//输出根节点值

preOrderTraverse(T->lchild);//遍历左子树

preOrderTraverse(T->rchild);//遍历右子树

}

}

//递归中序遍历二叉树

voidinOrderTraverse(constBiTree&T)

{

if(T)

{

inOrderTraverse(T->lchild);//遍历左子树

cout<data<<"";//输出根节点值

inOrderTraverse(T->rchild);//遍历右子树

}

}

//递归后序遍历二叉树

voidpostOrderTraverse(constBiTree&T)

{

if(T)

{

postOrderTraverse(T->lchild);//遍历左子树

postOrderTraverse(T->rchild);//遍历右子树

cout<data<<"";//输出根节点值

}

}

//递归求树的深度

intdepthOfBiTree(constBiTree&T)

{

intldepth;

intrdepth;

if(T==NULL)//空树

return0;

ldepth=depthOfBiTree(T->lchild);

rdepth=depthOfBiTree(T->rchild);

return(ldepth>rdepth)?

(ldepth+1):

(rdepth+1);

}

//递归求二叉树的叶子结点个数

intleafCountOfBiTree(constBiTree&T)

{

if(T==NULL)

return0;

if(T->lchild==NULL&&T->rchild==NULL)

return1;

returnleafCountOfBiTree(T->lchild)+leafCountOfBiTree(T->rchild);

}

intmain(intargc,char*argv[])

{

BiTreeT=NULL;

createBiTree(T);//建立二叉树AB#D##CE###

cout<<"先序遍历:

";//先序遍历

preOrderTraverse(T);

cout<

cout<<"中序遍历:

";//中序遍历

inOrderTraverse(T);

cout<

cout<<"后序遍历:

";//后序遍历

postOrderTraverse(T);

cout<

cout<<"深度:

"<

cout<<"叶子结点数:

"<

cout<<"总结点数量:

"<

destroyBiTree(T);//销毁二叉树,释放空间

intn;

scanf("%d",&n);

BiTreeTT=NULL;

creatBiTree_2(TT,n);

cout<<"先序遍历:

";//先序遍历

preOrderTraverse(TT);

cout<

cout<<"中序遍历:

";//中序遍历

inOrderTraverse(TT);

cout<

cout<<"后序遍历:

";//后序遍历

postOrderTraverse(TT);

cout<

cout<<"深度:

"<

cout<<"叶子结点数:

"<

cout<<"总结点数量:

"<

destroyBiTree(TT);//销毁二叉树,释放空间

system("PAUSE");

returnEXIT_SUCCESS;

}

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

当前位置:首页 > 初中教育 > 语文

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

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