树和二叉树实验报告Word文件下载.docx

上传人:b****3 文档编号:15821884 上传时间:2022-11-16 格式:DOCX 页数:18 大小:233.42KB
下载 相关 举报
树和二叉树实验报告Word文件下载.docx_第1页
第1页 / 共18页
树和二叉树实验报告Word文件下载.docx_第2页
第2页 / 共18页
树和二叉树实验报告Word文件下载.docx_第3页
第3页 / 共18页
树和二叉树实验报告Word文件下载.docx_第4页
第4页 / 共18页
树和二叉树实验报告Word文件下载.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

树和二叉树实验报告Word文件下载.docx

《树和二叉树实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《树和二叉树实验报告Word文件下载.docx(18页珍藏版)》请在冰豆网上搜索。

树和二叉树实验报告Word文件下载.docx

if(bt==NULL)

{

bt=(blink)malloc(sizeof(bnode));

bt->

data=ch;

lchild=bt->

rchild=NULL;

}

elseif(ch<

bt->

data)

lchild=add(bt->

lchild,ch);

else

rchild=add(bt->

rchild,ch);

returnbt;

}

voidinorder(blinkbt){

if(bt)

inorder(bt->

lchild);

printf("

%2c"

bt->

data);

inorder(bt->

rchild);

main()

blinkroot=NULL;

inti,n;

charx;

scanf("

%d"

&

n);

for(i=0;

i<

=n;

i++)

x=getchar();

root=add(root,x);

inorder(root);

printf("

\n"

);

3.实验结果:

(二)实验题目2:

编写程序,求二叉树的节点数和叶子树。

.定理:

二叉树如果有v0个叶子节点,那么就有v0-1个度为二的节点就是v0-1=v2

定理:

二叉树有N个节点N=v0+v1+v2即节点总数等于度为0,1,2的节点的和。

#defineERROR0

#defineOK1

#defineOVERFLOW-2

#defineTRUE1

typedefintStatus;

typedefcharTElemType;

typedefstructBiTNode

{TElemTypedata;

structBiTNode*lchild,*rchild;

}BiTNode,*BiTree;

intcount=0;

StatusCreateBiTree(BiTree*T)

charch;

scanf("

%c"

ch);

if(ch=='

'

)(*T)=NULL;

else{

if(!

((*T)=(BiTNode*)malloc(sizeof(BiTNode))))

exit(OVERFLOW);

(*T)->

CreateBiTree(&

((*T)->

lchild));

rchild));

returnOK;

StatusCountleaf(BiTreeT)

if(T)

{if((!

T->

lchild)&

&

(!

rchild))count++;

Countleaf(T->

rchild);

returncount;

StatusDepth(BiTreeT)

{intdepthval,depthleft=0,depthright=0;

T)depthval=0;

else

{depthleft=Depth(T->

depthright=Depth(T->

depthval=1+(depthleft>

depthright?

depthleft:

depthright);

returndepthval;

StatusPreorder(BiTreeT)

{if(T)

{printf("

%c"

T->

Preorder(T->

lchild);

StatusInOrderTraverse(BiTreeT,Status 

(*Visit)(TElemTypee)){

StackS;

InitStack(S);

p=T;

while(p=!

StackEmpty(S)){

if 

(p){Push(S,p);

p=p->

lchild;

else{Pop(S,p);

Visit(p->

data))returnERROR;

rchild;

voidmain()

{BiTreeT;

printf("

pleaseinputaTree:

"

T);

theTreeis:

Preorder(T);

InOrderTraverse(T);

thenumberofleavesis:

Countleaf(T));

theDepthofthetreeis:

Depth(T));

getch();

(三)实验题目3:

编写程序,实现按层次遍历二叉树。

定义:

1、满二叉树:

一棵深度为k且有2的k次方减1个结点的二叉树称为满二叉树

2、完全二叉树:

如果有深度为k的,有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中编号从1至n的结点一一对应时,称之为完全二叉树。

性质:

1、二叉树的第i层上至多有2的i-1次方个结点(i>

=1)。

2、深度为k的二叉树至多有2的k次方减1个结点(k>

3、对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1。

4、具有n个结点的完全二叉树的深度为以2为底n的对数取下限加1。

5、如果对一棵有n个结点的完全二叉树的结点按层序编号,则对任一结点i(1=<

i=<

n)有:

(1)如果i=1,则结点i是二叉树的根,无双亲;

如果i>

1,则双亲PARENT(i)是结点[i/2]

(2)如果2i>

n,则结点i无左孩子(结点i为叶子结点);

否则其左孩子LCHILD(i)是结点2i

(3)如果2i+1>

n,则结点i无右孩子;

否则其右孩子RCHILD(i)是结点2i+1.

存储结构:

顺序存储结构(数组方式),链式存储结构(二叉链表)

stdlib.h>

#defineMAXSIZE50

typedefcharDataType;

DataTypedata;

structnode*lchild;

structnode*rchild;

}BitNode;

typedefstructnode*BiTree;

voidCreateBiTree(BiTree*T)

DataTypech;

ch=getchar();

if(ch=='

#'

*T=NULL;

*T=(BiTree)malloc(sizeof(BitNode));

if(!

(*T))

exit(-1);

(*T)->

CreateBiTree(&

voidLayerOrder(BiTreeT)

BiTreequeue[MAXSIZE];

//BitNode*p;

BiTreep;

intfront,rear;

front=rear=-1;

rear++;

queue[rear]=T;

while(front!

=rear)

front=(front+1)%MAXSIZE;

p=queue[front];

p->

if(p->

lchild!

=NULL)

{

rear=(rear+1)%MAXSIZE;

queue[rear]=p->

}

rchild!

BiTreeT=NULL;

创建一颗二叉树<

#>

表示空:

\n"

二叉数层次遍历为:

LayerOrder(T);

(四)实验题目4:

编写程序,对二叉树进行先序遍历,并打印层号。

从二叉树的递归定义可知,一棵非空的二叉树由根结点及左、右子树这三个基本部分组成。

因此,在任一给定结点上,可以按某种次序执行三个操作:

(1)访问结点本身(N),

(2)遍历该结点的左子树(L),

(3)遍历该结点的右子树(R)。

根据遍历的原则:

先左后右,对于先序遍历,顾名思义就是先访问根节点,再访问左子树,最后访问右子树,

//指向左孩子结点

//指向右孩子结点

intlevel;

//生成根节点

da

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

当前位置:首页 > 工程科技 > 纺织轻工业

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

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