数据结构二叉树实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一 、实验目的和要求
(1)掌握树的相关概念,包括树、节点的度、树的度、分支节点、叶子节点、孩子节点、双亲节 点、树的深度、森林等定义。
(2)掌握树的表示,包括树形表示法、文氏图表示法、凹入表示法和括号表示法等。 (3)掌握二叉树的概念,包括二叉树、满二叉树和完全二叉树的定义。 (4)掌握二叉树的性质。
(5)重点掌握二叉树的存储结构,包括二叉树顺序存储结构和链式存储结构。 (6)重点掌握二叉树的基本运算和各种遍历算法的实现。 (7)掌握线索二叉树的概念和相关算法的实现。
(8)掌握哈夫曼树的定义、哈夫曼树的构造过程和哈夫曼编码的产生方法。 (9)掌握并查集的相关概念和算法。
(10)灵活运用二叉树这种数据结构解决一些综合应用问题。 二、实验内容
注:二叉树b 为如图7-123所示的一棵二叉树
图7-123+
实验7.1 编写一个程序algo7-1.cpp,实现二叉树的各种运算,并在此基础上设计一个程序
exp7-1.cpp 完成如下功能:
(1)输出二叉树b ;
(2)输出H 节点的左、右孩子节点值; (3)输出二叉树b 的深度; (4)输出二叉树b 的宽度; (5)输出二叉树b 的节点个数;
(6)输出二叉树b 的叶子节点个数。
实验7.2设计一个程序exp7-2.cpp,实现二叉树的先序遍历、中序遍历和后序遍历和非递归算法, 以及层次变量里的算法。并对图7-123所示的二叉树b 给出求解结果。
b+
A
C
F G
I
K
L+
N
M+
E+
Hd
J
D
₄
B
臣1607-1.CPP
if(b?-HULL)
re3P4+;
Qu[rear]-p-b;
Qu[rear].1no=1;
while(reart=front)
{
Front++;
b=Qu[front]-P;
lnum-Qu[front].1no;
if(b->Ichildt=NULL)
rpar+t;
Qu[rear]-p=b->1child;
Qu[rear].Ino-lnun+1;
if(D->rch11d?=NULL)1/根结点指针入队
//根结点的层次编号为1 1/队列不为空
1/队头出队
1/左孩子入队
1/右孩子入队
redr+t;
qu[rear]-p=b->rchild;
Qu[rear].1no-lnun*1;
}
}
nax-0;lnun-1;i-1;
uhile(i<=rear)
{
n=0;
whdle(i<=rear ge Qu[1].1no==1num)
n+t;it+;
Inun-Qu[i].1n0;
if(n>max)nax=n;
}
return max;
田1607-1.CPP
return max;
}
else
return o;
口×
int Modes(BTNode *D) //求二叉树D的结点个数
int nun1,nun2;
if(b==NULL)
returng,
else if(b->ichild==NULL&D->rchild==NULL)
return 1;
else
{
num1-Hodes(b->Ichild);
num2=Nodes(b->rchild);
return(num1+nun2+1);
LeafNodes(BINode *D) //求二叉树p的叶子结点个数
int num1,num2;
1f(D==NULL)
return 0;
else if(b->1chi1d==NULLc& b->rch11d==NULL)
return 1;
else
{
num1-LeafModes(b->lchild);
num2=LeafNodes(b->rchild);
return(nun1+nun2);
int
程序执行结果如下:
xCProrn FlslirosfViu l SudiollyPrjecslro7 LJebuglFoj7 ex
<1)输出二叉树:A>>>),C
<2)'H’结点:左孩子为J石孩子为K
(3)二叉树b的深度:7
<4)二叉树b的宽度:4
(5)二叉树b的结点个数:14
(6)二叉树b的叶子结点个数:6
>释放二叉树b
Press any key to continue
实验7 . 2
程序exp7-2.cpp设计如下:
坠eTPT-2.EPP
#include winclude deFn Masie 00 typde chr ElemTye typede sruct nde { ElemType data; stuc node *lclld struct node rchild; 》BTHode; extern vod reaeBNodeBTNode extrn void DispBTHode(BTNode uoid ProrderBTNode *b) if(b?-NULL) - 回 1 / 数据元素 1 / 指向左孩子 1 / 指向右孩子 *eb car *str) xb 1 / 先序遍历的递归算法 1 / 访问根结点 / / 递归访问左子树 1 7 递归访问右子树 / / 根结点入栈 //栈不为空时循环 / / 退栈并访问该结点 / / 右孩子入栈 { 》 v oid printf(*c“,b->data); Preorder(b->lchild); Pre0rder(b->rchild); Preorder1(BTNode *b) BTNode xSt[Maxsize],*p; int top=-1; if(b!-HULL) top++; St[top]-b; uhle (op>-) p-St[top]; top--; printf("%c“,p->data); if(p->rchild?-HULL) A