中序线索化二叉树实验报告数据结构.docx
- 文档编号:27281464
- 上传时间:2023-06-28
- 格式:DOCX
- 页数:8
- 大小:168.15KB
中序线索化二叉树实验报告数据结构.docx
《中序线索化二叉树实验报告数据结构.docx》由会员分享,可在线阅读,更多相关《中序线索化二叉树实验报告数据结构.docx(8页珍藏版)》请在冰豆网上搜索。
中序线索化二叉树实验报告数据结构
长沙理工大学
数学与计算科学学院
实验报告
实验项目名称二叉树的中序线索化
所属课程名称数据结构
实验类型验证型、设计型
实验日期2014年11月26日
班级
学号
XX
成绩
一、实验概述:
【实验目的】
熟悉二叉树存储结构,掌握线索二叉链表的特点及基本运算
【实验原理】
1、二叉树的特点:
(1)是一种树形结构;
(2)每个节点至多有两颗子树;
(3)且子树有左右之分,其次序不能颠倒。
2、二叉树的顺序存储表示:
#defineMAX_TREE_SIZE100//二叉树的最大节点数
TypedfTelemTypeSqBiTree[MAX_TREE_SIZE];//0号单元存储根节点
SqBiTreebt;
---二叉树的二叉链表存储表示---
typedef struct BiTNode{
TElemType data;
struct BiTNode *lchild,*rchild;//左右孩子指针
}BiTNode,*BiTree;
【实验环境】
VC++6.0
二、实验容:
【实验方案】
在Vc++环境下:
(1)构造二叉树T;
(2)编写二叉树T的中序线索化及中序遍历算法;
(3)设计主函数;
(4)调用以上算法,验证算法的正确性,调试运行,得出结果。
【实验过程】(实验步骤、记录、数据、分析)
1.输入头文件与宏定义,二叉树的存储结构,二叉树的中序线索化算法及中序遍历算法,设计主函数,定义数据类型,写入VC++6.0;
2.对程序进行第一次调试,出现以下错误:
3.检查源程序,分析错误原因
输入错误,将上述算法中的“p!
”误输为“p1”
针对错误,对源程序进行修改;
4.对源程序进行第二次调试,仍存在以下错误:
5.仔细核查源程序,寻找错误源头;
上述算法“BiThreTree*InOrderThrTree(BiThreTreeT)”中二叉树“T”前缺少标识符“*”
针对错误,再次对源程序进行修改;
6.对源程序进行第三次调试运行,未再出现错误;
7.输入任意数据如“abcdefg”,验证算法的正确性;
【实验结论】(结果)
【实验小结】(收获体会)
通过本次实验,我更加熟练地掌握了线索二叉链表的特点及基本运算。
在实验中遇到了一些问题,但通过同学的指导最终解决了。
完成这次作业后使我又进一步提高了程序编写的能力和增加了我对数据结构的兴趣。
三、指导教师评语及成绩:
评语
评语等级
优
良
中
及格
不及格
1.实验报告按时完成,字迹清楚,文字叙述流畅,逻辑性强
2.实验方案设计合理
3.实验过程(实验步骤详细,记录完整,数据合理,分析透彻)
4实验结论正确.
成绩:
指导教师签名:
批阅日期:
附录1:
源程序
#include
#include
#include
typedefenum{Link,Thread}PointerTag;//指针标志
typedefcharDataType;
typedefstructBiThreTree{//定义结点元素
PointerTagLTag,RTag;
DataTypedata;
structBiThreTree*lchild,*rchild;
}BiThreTree;
BiThreTree*pre;//全局变量,用于二叉树的线索化
BiThreTree*CreateTree()//按前序输入建立二叉树
{
BiThreTree*T;
DataTypee;
scanf("%c",&e);
if(e=='')
T=NULL;
else
{T=(BiThreTree*)malloc(sizeof(BiThreTree));
T->data=e;
T->LTag=Link;//初始化时指针标志均为Link
T->RTag=Link;
T->lchild=CreateTree();
T->rchild=CreateTree();
}
returnT;
}
voidInThread(BiThreTree*T)
{
BiThreTree*p;
p=T;
if(p)
{
InThread(p->lchild);
if(!
p->lchild)
{p->LTag=Thread;
p->lchild=pre;
}
if(!
pre->rchild)
{pre->RTag=Thread;
pre->rchild=p;
}
pre=p;
InThread(p->rchild);
}
}
BiThreTree*InOrderThrTree(BiThreTree*T)//中序线索化二叉树
{
BiThreTree*Thre;//Thre为头结点的指针
Thre=(BiThreTree*)malloc(sizeof(BiThreTree));
Thre->lchild=T;
Thre->rchild=Thre;
pre=Thre;
InThread(T);
pre->RTag=Thread;
pre->rchild=Thre;
Thre->rchild=pre;
returnThre;
}
voidInThrTravel(BiThreTree*Thre)//中序遍历二叉树
{
BiThreTree*p;
p=Thre->lchild;
while(p!
=Thre)//指针回指向头结点时结束
{
while(p->LTag==Link)
p=p->lchild;
printf("%c",p->data);
while(p->RTag==Thread&&p->rchild!
=Thre)
{p=p->rchild;
printf("%c",p->data);
}
p=p->rchild;
}
}
main()
{
BiThreTree*T,*Thre;
T=CreateTree();
Thre=InOrderThrTree(T);
InThrTravel(Thre);
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 线索 二叉 实验 报告 数据结构