数据结构树和二叉树实验报告文档格式.docx

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

数据结构树和二叉树实验报告文档格式.docx

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

数据结构树和二叉树实验报告文档格式.docx

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

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

三、实验预习内容

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

三、实验结果与分析

7-1

#include<

stdio.h>

malloc.h>

#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;

)'

top--;

break;

'

k=2;

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;

case2:

rchild=p;

}

}

}

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)

rchild;

intBTNodeDepth(BTNode*b)

intlchilddep,rchilddep;

if(b==NULL)

return(0);

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!

printf("

("

);

DispBTNode(b->

if(b->

=NULL)printf("

"

)"

intBTWidth(BTNode*b)

struct

intlno;

BTNode*p;

}Qu[MaxSize];

intfront,rear;

intlnum,max,i,n;

front=rear=0;

rear++;

Qu[rear].p=b;

Qu[rear].lno=1;

while(rear!

=front)

front++;

b=Qu[front].p;

lnum=Qu[front].lno;

=NULL)

{

rear++;

Qu[rear].p=b->

Qu[rear].lno=lnum+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;

return0;

intNodes(BTNode*b)

intnum1,num2;

if(b==NULL)

lchild==NULL&

b->

rchild==NULL)

return1;

num1=Nodes(b->

num2=Nodes(b->

return(num1+num2+1);

intLeafNodes(BTNode*b)

num1=LeafNodes(b->

num2=LeafNodes(b->

return(num1+num2);

voidmain()

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

;

CreateBTNode(b,"

A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))"

printf("

输出二叉树:

"

DispBTNode(b);

printf("

\n"

'

H'

结点:

p=FindNode(b,'

if(p!

lp=LchildNode(p);

if(lp!

左孩子为%c"

lp->

else

无左孩子"

rp=RchildNode(p);

if(rp!

右孩子为%c"

rp->

无右孩子"

二叉树b的深度:

%d\n"

BTNodeDepth(b));

二叉树b的宽度:

BTWidth(b));

二叉树b的结点个数:

Nodes(b));

二叉树b的叶子结点个数:

LeafNodes(b));

7-2

voidPreOrder(BTNode*b)

%c"

PreOrder(b->

voidPreOrder1(BTNode*b)

BTNode*St[MaxSize],*p;

inttop=-1;

top++;

St[top]=b;

while(top>

-1)

p=St[top];

top--;

p->

if(p->

St[top]=p->

voidInOrder(BTNode*b)

InOrder(b->

voidInOrder1(BTNode*b)

p=b;

while(top>

-1||p!

while(p!

top++;

St[top]=p;

p=p->

if(top>

-1)

p=St[top];

top--;

printf("

voidPostOrder(BTNode*b)

PostOrder(b->

voidPostOrder1(BTNode*b)

BTNode*St[MaxSize];

intflag,top=-1;

do

while(b!

St[top]=b;

b=b->

p=NULL;

flag=1;

while(top!

=-1&

flag)

b=St[top];

if(b->

rchild==p)

{

printf("

top--;

p=b;

}

else

b=b->

flag=0;

}while(top!

=-1);

}

voidLevelOrder(BTNode*b)

{BTNode*p;

BTNode*qu[MaxSize];

front=rear=-1;

rear++;

qu[rear]=b;

while(front!

=rear)

{front=(front+1)%MaxSize;

p=qu[front];

if(p->

{rear=(rear+1)%MaxSize;

qu[rear]=p->

BTNode*b;

二叉树b:

先序遍历序列:

递归算法:

PreOrder(b);

非递归算法:

PreOrder1(b);

中序遍历序列:

InOrder(b);

InOrder1(b);

后序遍历序列:

PostOrder(b);

PostOrder1(b);

层次遍历序列:

LevelOrder(b);

注:

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

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

当前位置:首页 > 高等教育 > 院校资料

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

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