二叉树前序或中序或后序遍历
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数学与计算机学院计算机系实验报告
课程名称: 数据结构
年级:2010 实验成绩: 指导教师: 黄襄念
姓名: 实验教室:6A-413 实验名称:二叉树前序或中序或后序遍历
学号: 实验日期:2012/6/10 实验序号:实验3
实验时间:8:00—11:40 实验学时:4 一、实验目的
1. 熟悉的掌握树的创建,和树的前序、中序、后序遍历。
二、实验环境
1. 操作系统:Windows7
2. 开发软件:Microsoft Visual C++ 6.0
三、实验内容
● 程序功能
本程序完成了以下功能:
1. 前序遍历
2. 中序遍历
3. 后序遍历
● 数据结构
本程序中使用的数据结构(若有多个,逐个说明):
1. 它的优缺点
1) 可以快速的查找数据。
2) 让数据层次更加清晰。
2. 逻辑结构图
3. 存储结构图
、、、、、、、、、、、、、、、、、、、、
4.存储结构的C/C++ 语言描述
typedef struct node {
DataType data;
struct node *lchild;
struct node *rchild;
} BiTNode, *BiTree;
typedef BiTree type;
●算法描述
本程序中采用的算法
1.算法名称:递归
2.算法原理或思想
是通过访问结点的左右孩子来进行循环查找的方法,拿中序遍历来说明:先从头结点开始,再去访问头结点的右孩子如果为空就访问头结点的左孩子,依次进行访问当结点的左右孩子都为空时,就访问上一级,到了最后。
3.算法特点
它能将查找进行2分,体现出了更高效快捷的特点,并且层次很清晰。
●程序说明
1.
2.
1)前序遍历模块:将树进行从头结点开始再左孩子再右孩子。
代码:void InOrder(BiTree root)
{
Stack S(100);
initStack(S);
BiTNode *p = root;
do
{
while(p != NULL)
{
Push(S, p);
p = p->lchild;
}
if(!isEmpty(S))
{
Pop(S, p);
cout << p->data << " ";
p = p->rchild;
}
} while(p != NULL || !isEmpty(S));
cout << endl;
}
2)后序遍历模块:将树进行从左孩子开始再右孩子再头结点。
代码:void PostOrder(BiTree root)
{
Stack S(100);
Stack SS(100);
initStack(S);
initStack(SS);
BiTNode *p = root;
do
{
while(p != NULL)
{
Push(S, p);
Push(SS, p);
p = p->rchild;
}
if(!isEmpty(S))
{
Pop(S, p);
p = p->lchild;
}
} while(p != NULL || !isEmpty(S));
while(!isEmpty(SS))
{
Pop(SS, p);
cout << p->data << " ";
}
cout << endl;
}
3)中序遍历模块:将树进行从左孩子开始再头结点再右孩子。
代码:void PreOrder(BiTree root)
{
Stack S(100);
initStack(S);
BiTNode *p = root;
do
{
while(p != NULL)
{
Push(S, p);
cout << p->data << " ";
p = p->lchild;
}
if(!isEmpty(S))
{
Pop(S, p);
p = p->rchild;
}
} while(p != NULL || !isEmpty(S));
cout << endl;
}
四、调试与运行
1. 程序调试
本程序开发过程中,采用的调试方法或手段如下:
1)方法1:在程序执行的终止的函数中加一条输出语句cout<<”*******”< 错误的定位,调试了指针没有正确使用的错误。 2)方法2:输出一些树中的数据,看能不能正确的输出,调试了其左右孩子是不是正 确。 2. 运行结果 本次实验多个功能需分别截图,逐个说明。 运行结果图1 …… 五、实验总结 1. 结果分析:本程序完成了树的前序遍历、中序遍历、后序遍历功能;但是还是存在不完善的地方,没有对结点进行删除增加等操作,没有将树的结构给输出。 2. 心得体会:通过这个实验我更熟练的掌握了二叉树的结构同时也更了解了递归算法,觉得数据结构是一个很不错的一门课程。