




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
上机实验4二叉树的遍历
【实验目的】
(1)掌握指针变量的含义及使用方法。
(2)熟悉二叉树结点的结构。
(3)掌握二叉树每一种操作具体实现的方法。
(4)学会利用递归的方法实现二叉树的遍历算法.
【实验内容】
实现对二叉树的如下操作:
(I)创建二叉树。
(2)先序遍历二叉树。
(3)中序遍历二叉树。
(4)后序遍历二叉树。
(5)按层遍历二叉树。
要求能够从键盘上输入建树的结点内容,并且将遍历的结果输出在屏幕上。
【实验步骤】
(1)在MicrosoftVisualC++中创建应用程序L4。
(2)在程序中创建二叉树的存储结构BiTNode,以链表作为存储结构。
(3)创建CreateBiTree。函数,实现创建二叉树的操作,能够按先序次序从键盘输入结
点内容,空格表示空树。
(4)创建PreOrderTraverse()函数,用递归的方法实现先序遍历二叉树的操作。
(5)创建InOrderTraverse()函数,用I递归的方法实现中序遍历二叉树的操作。
(6)创建PostOrderTraverse。函数,用递归的方法实现后序遍历二叉树的操作。
(7)创建LevelOrderTraverse。函数,实现按层遍历二叉树的操作。
(8)创建主函数,用switch语句实现从键盘上输入字符,选择要执行的操作。
(9)编译连接程序,执行并观察程序的运行效果。
【参考源代码】
#include"stdlib.h"
#include"stdio.h"
typedefstructBiTNode
(
chardata;
structBiTNode*lchild,*rchild;
}BiTNode,*BiTree;
voidCreateBiTree(BiTree&T)
{//按先序次序输入,构造二叉链表表示的二叉树T,空格表示空树
charch;
scanf("%c”,&ch);
if(ch==~)T=NULL;
else{
if(!(T=(BiTNode*)malloc(sizeof(BiTNode))))exit(-l);
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
)//CreateBiTree
voidPreOrderTraverse(BiTreeT)
{〃先序遍历
if(T){
primf("%cn,T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
)
}//PreOrderTraverse
voidInOrderTraverse(BiTreeT)
{〃中序遍历
if(T){
InOrderTraverse(T->lchild);
printf("%c",T->data);
InOrderTraverse(T->rchild);
)
}//InOrderTraverse
voidPostOrderTraverse(BiTreeT)
{〃后序遍历
if(T){
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
printf(n%cn,T->data);
)
}//PostOrderTraverse
voidLevelOrderTraverse(BiTreeT)
(〃按层遍历
constintMaxLength=100;
BiTreeQ[MaxLength];
Q[0]=T;
intfront=0,rear=1;
while(front<rear)
(
if(Q|front])
(
printf(u%cM,Q[front]->data);
Q[rear++]=Q[front]->lchild;
Q[rear++]=Q[front]->rchild;
front++;
}
else
(
front++;
}
)
}//LevelOrderTraverse
voidmain()
(
BiTreeT=NULL;
charselect;
while(l)
{
printf("请选择要执行的操作:\n");
printf("l.创建二叉树\n");
printf("2.二叉树的递归遍历算法(前、中、后)\n");
printf("3.二叉树的层序遍历算法\n");
printf("0.退出\n");
fflush(stdin);
scanf("%c",&select);
fflush(stdin);
switch(select)
(
case'O':retum;
caseT:
printf("请按先序次序输入各结点的值,以空格表示空树(输入时可连
续输入):\n");
CreateBiTree(T);
printf(,,\nn);
break;
case2:
printf("先序遍历:");
PreOrderTraverse(T);
printf("\n中序遍历:");
InOrderTraverse(T);
printf(”\n后序遍历:");
PostOrderTraverse(T);
printf(n\n\nn);
break;
case3:
printf("层序遍历:");
LevelOrderTraverse(T);
printf(n\n\nH);
break;
default:
printf("请确认选择项!\n\n");
}//endswitch
}//endwhile
}//endmain
【实验结果】
运行示例:构建如下二叉树,并且将其遍历的结果输出在屏幕上。
步骤1:输入1,按Entera,等待创建二叉树。
步骤2:按先序方式构建二叉树,输入:abd(空两格)e(空两格)c(空两格),按Enter键确认
输入。
步骤3:输入2,按Enter®,观察显示结果。
步骤4:输入3,按Enter@,观察显示结果。
步骤5:输入0,退出循环程序。
运行结果如附图4所示。
C:\WINDOVS\syste・32\c・d.
的
操作
请
选笛
执一
要
叉
创
叉
二
的
二
层
遍
1.历1
叉
招中、后)
I2.的
二
遍
历
B.出
B.1退
以空格表示空树(输入时可连续输入>:
精选会要执代的操作:
仪.创建二叉树
口三叉树的递归遍璧(前、中、后)
b)一.二叉.树的层序遍历:
「退出
2
映•序遍历:aba
|中序遍历:db
后存遍历:debea
愣聚鹦的操作
E.二叉树的「…递八归遍'历-(前、中、后)
「二叉翱
’的层序遍历
退出
p*.
层序遍历:abcde
情姆至要执行的操作:
k创灌二攵希
除二叉树的蓬归遍历萋(前、申、后)
"二叉树的层序遍历事
口.退出I
tT
附图4上机实验4运行结果
【实验总结】
在创建二叉树时应注意程序的编写,在参考程序中,使用空格来表示空树,所以在创建
时,如果结点的子树为空时,一定要输入空格,方能成功创建二叉树。当然,也可用其他的
字符(如“#")
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025昆明市盘龙职业高级中学烹饪教师招聘(1人)模拟试卷及答案详解(夺冠系列)
- 2025山东济南西兴人力资源咨询服务有限公司公开招聘播音主持人员2人笔试题库历年考点版附带答案详解
- 2025安康高新集团旗下子公司招聘(4人)模拟试卷及答案详解(全优)
- 2025届华润电力校园招聘(175个岗位)笔试题库历年考点版附带答案详解
- 2025河北张家口启臻学校高中储备教师招聘模拟试卷及答案详解(名校卷)
- 2025年黑河市孙吴县卫生健康局乡村医生公开招聘8人模拟试卷及答案详解(夺冠系列)
- 2025河南济源职业技术学院高层次人才引进20人考前自测高频考点模拟试题含答案详解
- 2025河南郑州师范学院诚聘高层次人才模拟试卷有答案详解
- 2025江苏徐州市教育局直属事业单位选调3人模拟试卷及答案详解(名校卷)
- 2025昆明市滇池管理局引进高层次人才(1人)考前自测高频考点模拟试题及答案详解(必刷)
- 国企安全环保培训会课件
- 炎症与心脑血管疾病
- 2025九省联考试题生物及答案
- GB/T 45743-2025生物样本细胞运输通用要求
- 2型糖尿病低血糖护理查房课件
- 医院物业服务投标方案
- 高压燃气管道施工方案
- 国家免疫规划疫苗儿童免疫程序说明-培训课件
- GB/T 13298-1991金属显微组织检验方法
- 劳动人事争议仲裁案例分析与问题探讨课件
- 石油化工设备维护检修规程 化工设备
评论
0/150
提交评论