数据结构二叉树实验报告

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

相关文档
最新文档