数据结构实验报告二叉排序树Word格式.docx

上传人:b****4 文档编号:17855820 上传时间:2022-12-11 格式:DOCX 页数:21 大小:109.97KB
下载 相关 举报
数据结构实验报告二叉排序树Word格式.docx_第1页
第1页 / 共21页
数据结构实验报告二叉排序树Word格式.docx_第2页
第2页 / 共21页
数据结构实验报告二叉排序树Word格式.docx_第3页
第3页 / 共21页
数据结构实验报告二叉排序树Word格式.docx_第4页
第4页 / 共21页
数据结构实验报告二叉排序树Word格式.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

数据结构实验报告二叉排序树Word格式.docx

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

数据结构实验报告二叉排序树Word格式.docx

节点48的平衡因子为0

节点76的平衡因子为0

节点60的平衡因子为0

节点84的平衡因子为0

二概要设计

为了实现以上操作,应以二叉链表为存储结构。

1.基本操作:

node*create()

创建二叉排序树

voidNRPreorder(node*bt)

先序非递归遍历输出

voidNRinorder(node*bt)

中序非递归遍历输出

voidNRpostorder(node*bt)

后序非递归遍历输出

intheight(node*bt)

计算左右子树深度

voidshendu(node*bt)

计算平衡因子

2.本程序包含七个模块

(1)主程序模块

(2)二叉排序树创建模块

(3)

先序遍历模块

(4)中序遍历模块

(5)后序遍历模块

(6)

计算左右子树深度模块

(7)计算平衡因子模块

3.

模块调用图

 

三详细设计 

1.元素类型,结点类型和指针类型:

#definemaxsize100

typedefstructnode

{

chardata;

structnode*lc;

structnode*rc;

}node;

node*s[maxsize];

node*bt;

node*q,*p;

2.每个模块的分析:

(1)主程序模块:

intmain()

node*bt;

bt=create();

printf("

该二叉树的先序递归遍历序列为:

"

);

preorder(bt);

\n"

该二叉树的中序递归遍历序列为:

inorder(bt);

该二叉树的后序递归遍历序列为:

postorder(bt);

该二叉树的先序非递归遍历序列为:

"

NRPreorder(bt);

该二叉树的中序非递归遍历序列为:

NRinorder(bt);

该二叉树的后序非递归遍历序列为:

NRpostorder(bt);

以先序遍历输出该二叉树,每个节点的平衡因子如下:

shendu(bt);

getchar();

return0;

}

(2)二叉排序树创建模块:

node*q,*p;

bt=NULL;

/*根节点指针置空*/

intx;

inti;

intm;

intj;

请输入数据个数:

scanf("

%d"

&

m);

请输入数据:

for(j=0;

j<

m;

j++)

{

x);

i=0;

q=(node*)malloc(sizeof(node));

/*申请新节点,将新节点数据域赋值,左右孩子置空*/

q->

data=x;

q->

lc=q->

rc=NULL;

if(bt==NULL)/*如果根节点指针为空,将其指向新申请节点*/

bt=q;

else

{

p=bt;

/*活动指针指向根节点*/

while(i==0)

{

if(p->

data>

x)/*如果新输入的数值比当前节点的数值小*/

{

if(p->

lc!

=NULL)/*如果当前节点的左孩子不为空,将活动指针移到它的左孩子*/

p=p->

lc;

else/*否则将新申请节点链到当前节点的左孩子,将i标记为1,表示已处理*/

{

p->

lc=q;

i=1;

}

}

else/*否则沿右链域比较*/

rc!

=NULL)

rc;

else/*直到终端,插入输入节点*/

rc=q;

}

}

}

returnbt;

(3)先序遍历模块:

node*p;

top=-1;

top++;

s[top]=bt;

while(top!

=-1)

p=s[top--];

while(p)

%d"

p->

data);

s[top]=p->

p=p->

(4)中序遍历模块

inttop;

if(bt==NULL)return;

top=0;

p=bt;

while(!

(p==NULL&

&

top==0))

while(p!

=NULL)

s[top]=p;

top++;

p=p->

if(top<

=0)return;

top--;

p=s[top];

printf("

(5)后序遍历模块:

node*p,*q;

inttop=-1;

intflag;

if(p!

do

while(p!

top++;

s[top]=p;

p=p->

q=NULL;

flag=1;

while(top!

=-1&

flag)

p=s[top];

rc==q)

printf("

top--;

q=p;

else

p=p->

flag=0;

}while(top!

=-1);

(6)计算左右子树深度模块

inthl,hr;

if(bt==NULL)/*利用递归算法求左右子树的深度*/

return0;

else

hl=height(bt->

lc);

hr=height(bt->

rc);

if(hl>

hr)

return(hl+1);

else

return(hr+1);

(7)计算平衡因子模块

intsl,sr;

intph;

sl=height(p->

/*当前节点左子树的深度*/

sr=height(p->

/*当前节点右子树的深度*/

ph=sl-sr;

/*当前节点的平衡因子*/

节点为%d的平衡因子为%d\n"

data,ph);

3.函数调用图:

4.完整的程序:

(见源文件).

四使用说明、测试分析及结果

1.程序使用说明

(1)本程序的运行环境为VC6.0。

(2)进入演示程序后即显示提示信息:

请输入数据个数:

请输入数据:

输入完数据以三种形式输出二叉排序树,并输出每个节点的平衡因子.

2.测试数据:

3.运行界面:

五、实验总结

本次试验过程比较顺利,由于上次的二叉树积累了经验,所以这次编得比较快,编程过程中没有出现问题,通过这次编程对于二叉树有了更进一步的熟悉和了解,可以熟练编写二叉排序树,熟悉了二叉排序树的结构,并且对于计算节点的深度以及节点的平衡因子有了一定的掌握。

教师评语:

实验成绩:

#include<

stdio.h>

malloc.h>

//定义结构体

//定义栈

inttop=-1;

//创建二叉排序树

//先序递归遍历

voidpreorder(node*bt)

if(bt!

printf("

bt->

preorder(bt->

//中序递归遍历

voidinorder(node*bt)

inorder(bt->

//后序递归遍历

voidpostorder(node*bt)

postorder(bt->

//先序非递归遍历

//中序非递归遍历

//后序非递归遍历

//计算平衡因子

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

当前位置:首页 > 高等教育 > 文学

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

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