版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据结构实验报告一一实验7
一、实验目的
掌握二叉链表及二叉树的创建、遍历;
二、实验内容
1、(必做题)假设二叉树中数据元素类型是字符型,请采用二叉链表实现二叉树的以下基本操作:
(1)根据二叉树的先序序列和中序序列构造二叉树;
(2)根据先序遍历二叉树;
(3)根据中序遍历二叉树;
(4)根据后序遍历二叉树。
测试数据包括如下错误数据:
先序:1234;中序:12345
先序:1234;中序:1245
先序:1234;中序:4231
2、(必做题)对于一棵二叉树,请实现:
(1)计算二叉树的叶子数目;
(2)计算二叉树的深度。
3、(选做题)给定n个权值,请构造它们的最优二叉树(赫夫曼树)。
三、算法描述
(采用自然语言描述)
1,分别输入n个先序序列和中序序列,先序序列中第一个字符为根节点,在中序序列中找到根节
点所在的位置,在根节点左边的为左子树节点,在根节点右边的为右子树节点,然后采用递归的形式依
次对左右子树进行构造;二叉树的遍历也是采用递归的形式,先序遍历二叉树:先序遍历根,先序遍历
左子树,先序遍历右子树;中序遍历二叉树:中序遍历左子树,中序遍历根,中序遍历右子树;后序遍
历二叉树:后序遍历左子树,后序遍历右子树,后序遍历根。
四、详细设计
(画出程序流程图)
五、程序代码
(给出必要注释)
1、
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#defineN100
typedefcharElementType;
typedefstructnode
(
ElementTypedata;
structnode*leftChild;
structnode*rightChild;
}BTNode;
BTNode*createBT(char*pre,char*in,intn)
(
BTNode*b;
char*p;
intk;
if(n<=0)
returnNULL;
b=(BTNode*)malloc(sizeof(BTNode));
b->data=*pre;
intj=0;
for(p=in;p<in+n;p++)
(
if(*p==*pre)
break;
)
k=p-in;
b->leftChild=createBT(pre+1,in,k);
b->rightChild=createBT(pre+1+k,p+1,n-k-1);
returnb;
voidshowBTPreOrder(BTNode*b)
if(b!=NULL)
(
printf("%cn,b->data);
showBTPreOrder(b->leftChild);
showBTPreOrder(b->rightChild);
voidshowBTInOrder(BTNode*b)
(
if(b!=NULL)
(
showBTInOrder(b->leftChild);
printf(M%c",b->data);
showBTInOrder(b->rightChild);
)
)
voidshowBTTailOrder(BTNode*b)
(
if(b==NULL)
return;
showBTTailOrder(b->leftChild);
showBTTailOrder(b->rightChild);
printf(H%c*',b->data);
)
intmain()
{
charpre[N];
charin[N];
intn=0;
charch;
BTNode*b=NULL;
printf("请输入先序序列\n");
while((ch=getchar())&&ch!
pre|n++]=ch;
printf("请输入中序序列\n");
n=0;
while((ch=getchar())&&ch!='\n')
in[n++]=ch;
b=createBT(pre,in,n);
printf("先序遍历二叉树:\n");
showBTPreOrder(b);
printf("\nM);
printf("中序遍历二叉树:\n)
showBTInOrder(b);
printf(n\nM);
printf("后序遍历二叉树:\n");
showBTTailOrder(b);
printf(n\nn);
return0;
)
2、
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#defineN100
typedefcharElementType;
typedefstructnode
{
ElementTypedata;
structnode*leftChild;
structnode*rightChild;
JBTNode;
BTNode*createBT(char*pre,char*in,intn)
(
BTNode*b;
char*p;
intk;
if(n<=0)
returnNULL;
b=(BTNode*)malloc(sizeof(BTNode));
b->data=*pre;
intj=0;
for(p=in;p<in+n;p++)
if(*p==*pre)
break;
)
k=p-in;
b->leftChild=createBT(pre+1,in,k);
b->rightChild=createBT(pre+1+k,p+1,n-k-1);
returnb;
)
intCounl(BTNode*top){
if(top==NULL){
return0;
)
elseif((top->leftChild==NULL)&&(top->rightChild==NULL)){
return1;
}
else{
returnCount(top->leftChild)+Count(top->rightChild);
)
)
intTreeDepth(BTNode*top)
(
intrightdep=0;
intleftdep=0;
if(top==NULL)
return-1;
if(top->leftChild!=NULL)
leftdep=TreeDepth(top->leftChild);
else
leftdep=-l;
if(top->rightChild!=NULL)
rightdep=TreeDepth(top->rightChild);
else
rightdep="l;
return(rightdep>leftdep)?rightdep+1:leftdep+1;
intmain()
charpre[N];
charin[N];
intn=0;
charch;
BTNode*b=NULL;
printf("请输入先序序列\n)
while((ch=getchar())&&ch!='\n')
pre[n++]=ch;
printf("请输入中序序列\n)
n=0;
while((ch=getchar())&&ch!='\n')
in[n++]=ch;
b=createBT(pre,in,n);
printf("二叉树的叶子数目为:%d\n",Count(b));
printf("二叉树的深度为:%d\n",TreeDepth(b));
return0;
}
六、测试和结果
(给出测试用例,并给出测试结果)
1、
■C:\Users\Administrator\Desktop\shiyan7_1_1\bin\Debug\shiyan7_1_1.exe
请输入先序序列
ABDHKECFIGJ
请输入中序序列
HKDBEAIFCGJ
先序遍历二叉树:
ABDHKECFIGJ
巾序遍历二叉树:
HKDBEAIFCGJ
后序遍历二叉树:
KHDEBIFJGCA
Processreturned0(0x0)executiontime:25.048s
Pres
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年湖南省资兴市高考物理模拟预测试卷含完整答案详解【网校专用】
- 2026年吉林省德惠市高考物理5月学情自测模拟卷及参考答案详解(夺分金卷)
- 2025年四川省华蓥市高考物理二轮专题试卷【模拟题】附答案详解
- 2025年山东省即墨市高考物理一模测试卷附答案详解(研优卷)
- 2026年云南省安宁市高考物理真题汇编考试卷(满分必刷)附答案详解
- 2026年湖北省钟祥市高考物理三轮冲刺测试卷及答案详解(易错题)
- 2026年河北省河间市高考物理周测模拟卷(全优)附答案详解
- 2025年广东省乐昌市高考物理三轮冲刺测试卷及完整答案详解【典优】
- 2026年吉林省临江市高考物理学业考试测试卷含完整答案详解(名师系列)
- 2025年陕西省兴平市高考物理真题汇编考试卷及完整答案详解【易错题】
- 汛期安全生产知识培训
- 《抗高血压药》课件
- 2025年电大国际法试题及答案
- 以政府绩效与公众信任为主题撰写一篇小论文1200字
- 一例食管癌术后患者的营养护理个案
- 浙大城市学院《操作系统原理》2021-2022学年第一学期期末试卷
- 2024年保育员(中级)考试题库(含答案)
- 食品过敏原培训
- 农村饮水项目施工设计方案
- 2024年隔音装修合同范本
- (高清版)AQ 2004-2005 地质勘探安全规程
评论
0/150
提交评论