数据结构树和二叉树实验报告.docx

上传人:b****5 文档编号:6252049 上传时间:2023-01-04 格式:DOCX 页数:14 大小:16.96KB
下载 相关 举报
数据结构树和二叉树实验报告.docx_第1页
第1页 / 共14页
数据结构树和二叉树实验报告.docx_第2页
第2页 / 共14页
数据结构树和二叉树实验报告.docx_第3页
第3页 / 共14页
数据结构树和二叉树实验报告.docx_第4页
第4页 / 共14页
数据结构树和二叉树实验报告.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

数据结构树和二叉树实验报告.docx

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

数据结构树和二叉树实验报告.docx

数据结构树和二叉树实验报告

《数据结构》课程实验报告

实验名称

树和二叉树

实验序号

5

实验日期

姓名

院系

班级

学号

专业

指导教师

成绩

教师评语

一、实验目的和要求

(1)掌握树的相关概念,包括树、结点的度、树的度、分支结点、叶子结点、儿子结点、双亲结点、树的深度、森林等定义。

(2)掌握树的表示,包括树形表示法、文氏图表示法、凹入表示法和括号表示法等。

(3)掌握二叉树的概念,包括二叉树、满二叉树和完全二叉树的定义。

(4)掌握二叉树的性质。

(5)重点掌握二叉树的存储结构,包括二叉树顺序存储结构和链式存储结构。

(6)重点掌握二叉树的基本运算和各种遍历算法的实现。

(7)掌握线索二叉树的概念和相关算法的实现。

(8)掌握哈夫曼树的疋义、哈夫曼树的构造过程和哈夫曼编码产生方法。

(9)掌握并查集的相关概念和算法。

(10)灵活掌握运用二叉树这种数据结构解决一些综合应用问题。

二、实验项目摘要

1•编写一程序,实现二叉树的各种基本运算,并在此基础上设计一个主程序完成如下功能:

(1)输出二叉树b;

(2)输出H结点的左、右孩子结点值;

(3)输出二叉树b的深度;

(4)输出二叉树b的宽度;

(5)输出二叉树b的结点个数;

(6)输出二叉树b的叶子结点个数。

2•编写一程序,实现二叉树的先序遍历、中序遍历和后序遍历的各种递归和非递归算法,以及层次遍历的算法。

三、实验预习内容

二叉树存储结构,二叉树基本运算(创建二叉树、寻找结点、找孩子结点、求高度、输出二叉树)

三、实验结果与分析

7-1

#include

#inelude

#defineMaxSize100

typedefcharElemType;

typedefstructnode

{

ElemTypedata;

structnode*lchild;

structnode*rchild;

}BTNode;

voidCreateBTNode(BTNode*&b,char*str)

{

BTNode*St[MaxSize],*p=NULL;

inttop=-1,k,j=0;

charch;

b=NULL;ch=str[j];

while(ch!

='\0')

{

switch(ch)

{

case'(':

top++;St[top]=p;k=1;break;

case')':

top--;break;

case',':

k=2;break;default:

p=(BTNode*)malloc(sizeof(BTNode));p->data=ch;p->lchild=p->rchild=NULL;

if(b==NULL)

b=p;

else

{

switch(k)

{

case1:

St[top]->lchild=p;break;case2:

St[top]->rchild=p;break;}

}

}

j++;

ch=str[j];

}

BTNode*FindNode(BTNode*b,ElemTypex)

{

BTNode*p;

if(b==NULL)

returnNULL;

elseif(b->data==x)returnb;

else

{

p=FindNode(b->lchild,x);

if(p!

=NULL)

returnp;

else

returnFindNode(b->rchild,x);

}

}

BTNode*LchildNode(BTNode*p)

{

returnp->lchild;

}

BTNode*RchildNode(BTNode*p)

{

returnp->rchild;

}

intBTNodeDepth(BTNode*b)

{

intlchilddep,rchilddep;

if(b==NULL)return(0);

else

{lchilddep=BTNodeDepth(b->lchild);rchilddep=BTNodeDepth(b->rchild);

return(lchilddep>rchilddep)?

(lchilddep+1):

(rchilddep+1);}

}

voidDispBTNode(BTNode*b)

if(b!

=NULL)

{

printf("%c",b->data);

if(b->lchild!

=NULL||b->rchild!

=NULL){

printf("(");

DispBTNode(b->lchild);

if(b->rchild!

=NULL)printf(",");

DispBTNode(b->rchild);

printf(")");

}

}

}

intBTWidth(BTNode*b)

{

struct

{

intIno;

BTNode*p;

}Qu[MaxSize];

intfront,rear;

intlnum,max,i,n;

front=rear=0;

if(b!

=NULL)

{

rear++;

Qu[rear].p=b;

Qu[rear].lno=1;

while(rear!

=front)

{

front++;

b=Qu[front].p;

lnum=Qu[front].lno;

if(b->lchild!

=NULL)

{

rear++;

Qu[rear].p=b->lchild;

Qu[rear]」no=lnum+1;

}

if(b->rchild!

=NULL)

{

rear++;

Qu[rear].p=b->rchild;

Qu[rear].lno=1num+1;

}

}

max=0;lnum=1;i=1;

while(i<=rear)

{

n=0;

while(i<=rear&&Qu[i].lno==lnum)

{

n++;i++;

}

lnum=Qu[i].lno;

if(n>max)max=n;

}

returnmax;

}

else

return0;

}

intNodes(BTNode*b)

{

intnum1,num2;

if(b==NULL)return0;

elseif(b->lchild==NULL&&b->rchild==NULL)return1;

else

{

num仁Nodes(b->lchild);

num2=Nodes(b->rchild);return(num1+num2+1);

}

}

intLeafNodes(BTNode*b)

{

intnum1,num2;

if(b==NULL)return0;

elseif(b->lchild==NULL&&b->rchild==NULL)return1;

else

{

num仁LeafNodes(b->lchild);

num2=LeafNodes(b->rchild);

return(num1+num2);

}

}

voidmain()

{

BTNode*b,*p,*lp,*rp;;

CreateBTNode(b,"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,l)))");printf(”输出二叉树:

");DispBTNode(b);printf("\n”);printf("'H'结点:

");

p=FindNode(b,'H');

if(p!

=NULL)

{

lp=LchildNode(p);

if(lp!

=NULL)

printf("左孩子为%c",lp->data);

else

printf("无左孩子”);

rp=RchildNode(p);

if(rp!

=NULL)

printf("右孩子为%c",rp->data);

else

printf("无右孩子”);

}

printf("\n");

printf("二叉树b的深度:

%d\n",BTNodeDepth(b));printf("二叉树b的宽度:

%d\n",BTWidth(b));

printf("二叉树b的结点个数:

%d\n",Nodes(b));printf("二叉树b的叶子结点个数:

%d\n",LeafNodes(b));

}

7-2

#include

#include

#defineMaxSize100

typedefcharElemType;

typedefstructnode

{

ElemTypedata;structnode*lchild;structnode*rchild;

}BTNode;

voidCreateBTNode(BTNode*&b,char*str)

{

BTNode*St[MaxSize],*p=NULL;

inttop=-1,k,j=0;

charch;

b=NULL;

ch=str[j];

while(ch!

='\0')

{

switch(ch)

{

case'(':

top++;St[top]=p;k=1;break;

case')':

top--;break;case',':

k=2;break;

default:

p=(BTNode*)malloc(sizeof(BTNode));p->data=ch;p->lchild=p->rchild=NULL;

if(b==NULL)

b=p;

else

{

switch(k)

{

case1:

St[top]->lchild=p;break;case2:

St[top]->rchild=p;break;}

}

}

j++;

ch=str[j];

}

}

voidDispBTNode(BTNode*b)

{

if(b!

=NULL)

{

printf("%c",b->data);

if(b->lchild!

=NULL||b->rchild!

=NULL)

printf("(");

DispBTNode(b->lchild);if(b->rchild!

=NULL)printf(",");DispBTNode(b->rchild);printf(")");

}

}

}

voidPreOrder(BTNode*b)

{

if(b!

=NULL)

{

printf("%c”,b->data);

PreOrder(b->lchild);PreOrder(b->rchild);

}

}

voidPreOrder1(BTNode*b)

{

BTNode*St[MaxSize],*p;

inttop=-1;

if(b!

=NULL)

{

top++;

St[top]=b;

while(top>-1)

{

p=St[top];

top--;

printf("%c",p->data);

if(p->rchild!

=NULL)

{

top++;

St[top]=p->rchild;

}

if(p->lchild!

=NULL)

{

top++;

St[top]=p->lchild;

}

}

printf("\n");

}

}

voidInOrder(BTNode*b)

{

if(b!

=NULL)

{

InOrder(b->lchild);

printf("%c”,b->data);

InOrder(b->rchild);

}

}

voidInOrder1(BTNode*b)

{

BTNode*St[MaxSize],*p;

inttop=-1;

if(b!

=NULL)

{

p=b;

while(top>-1||p!

=NULL)

{

while(p!

=NULL)

{

top++;

St[top]=p;p=p->lchild;

}

if(top>-1)

{p=St[top];top--;

printf("%c",p->data);p=p->rchild;

}

}

printf("\n");

}

}

voidPostOrder(BTNode*b)

{

if(b!

=NULL)

{

PostOrder(b->lchild);

PostOrder(b->rchild);

printf("%c”,b->data);

}

}

voidPostOrder1(BTNode*b)

{

BTNode*St[MaxSize];

BTNode*p;

intflag,top=-1;

if(b!

=NULL)

{

do

{

while(b!

=NULL)

{

top++;

St[top]=b;b=b->lchild;

}

p=NULL;

flag=1;

while(top!

=-1&&flag)

{

b=St[top];

if(b->rchild==p)

{

printf("%c",b->data);top--;

p=b;

}else

{

b=b->rchild;flag=0;

}

}

}while(top!

=-1);

printf("\n");

}

}

voidLevelOrder(BTNode*b)

{BTNode*p;

BTNode*qu[MaxSize];

intfront,rear;

front=rear=-1;

rear++;

qu[rear]=b;

while(front!

=rear)

{front=(front+1)%MaxSize;

p=qu[front];

printf("%c",p->data);

if(p->lchild!

=NULL)

{rear=(rear+1)%MaxSize;qu[rear]=p->lchild;

}

if(p->rchild!

=NULL)

{rear=(rear+1)%MaxSize;qu[rear]=p->rchild;

}

}

}

voidmain()

{

BTNode*b;

CreateBTNode(b,"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,l)))");printf("二叉树b:

");DispBTNode(b);printf("\n");

printf("先序遍历序列:

\n");

printf("递归算法:

");PreOrder(b);printf("\n");

printf("非递归算法:

");PreOrder1(b);

printf("中序遍历序列:

\n");

printf("递归算法:

");InOrder(b);printf("\n");

printf("非递归算法:

");InOrder1(b);

printf("后序遍历序列:

\n");

printf("递归算法:

");PostOrder(b);printf("\n");

printf("非递归算法:

");PostOrder1(b);

printf(”层次遍历序歹U:

”);LevelOrder(b);printf("\n");

注:

空间不够,可以增加页码。

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

当前位置:首页 > 党团工作 > 入党转正申请

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

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