数据结构课程设计之线索二叉树的应用Word文档下载推荐.docx
- 文档编号:13072825
- 上传时间:2022-10-04
- 格式:DOCX
- 页数:33
- 大小:327.54KB
数据结构课程设计之线索二叉树的应用Word文档下载推荐.docx
《数据结构课程设计之线索二叉树的应用Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计之线索二叉树的应用Word文档下载推荐.docx(33页珍藏版)》请在冰豆网上搜索。
加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树。
线索性质的不同,线索二叉树可分为前序线索二叉树、中序线索二叉树和后序线索二叉树三种。
在此次课程设计中,采用的是中序线索二叉树。
2.基本功能
1:
定义数据结构;
2:
建立二叉树函数,返回根指针;
3:
中序遍历;
4:
中序线索化算法函数实现;
5:
输出线索;
6:
查找数据结点函数;
7:
查找父亲结点函数;
8:
插入结点函数;
9:
删除结点函数。
3.输入输出
原始数据要求输入二叉树的七个结点:
abcdefg,输入的是一个二叉树,这就实现了
二叉树的建立过程。
然后对二叉树进行线索化。
对其进行插入:
在d结点插入结点h;
删除:
删除结点f;
恢复线索等功能。
**********************************
* *
*课程设计题目:
线索二叉树的运算.*
创建二叉树,请依次输入,@表示虚结点,以#结束:
abcdef@@g
1中序输出二叉树
2进行二叉树线索化
3进行插入操作
4进行删除操作
5输出线索二叉树
0退出请选择:
1
→d→g→b→e→a→f→c
0退出请选择:
2
已经实现二叉树的线索化,(可选择'
5'
查看线索)
二、概要设计
1.设计思路:
建立二叉树(即指在内存中建立二叉树的存储结构),建立一个二叉链表,需按某种顺
序一次输入二叉树中的结点,且输入顺序必须隐含结点间的逻辑结构信息。
对于一般的二叉树,需添加虚结点,使其成为完全二叉树。
关键在于如何将新结点作为左孩子和右孩子连接到它的父结点上。
可以设置一个队列,该队列是一个指针类型的数组,保存已输入的结点地址。
操作:
(1)令队头指针front指向其孩子结点当前输入的建立链接的父结点,队尾指针rear指向当前输入的结点,初始:
front=1,rear=0;
(2)若rear为偶数,则该结点为父结点的左孩子;
若rear为奇数,则该结点的右孩子;
若父结点和孩子结点为虚结点,则无需链接。
(3)若父结点与其两个孩子结点的链接完毕,则令front=front+1,使front指向下一个等待链接的父结点。
二叉树的中序线索化算法与中序遍历算法类似。
只需要将遍历算法中访问结点的操作具体化为建立正在访问的结点与其非空中序前趋结点间线索。
该算法应附设一个指针pre始终指向刚刚访问过的结点(pre的初值应为NULL),而指针p指示当前正在访问的结点。
结点*pre是结点*p的前趋,而*p是*pre的后继。
结点插入算法:
由线索二叉树的定义易知插入的节点定是个叶子节点,需注意线索的修改,可分为两种情况:
(1):
插入的节点t是右儿子,t的中序后继是其父亲的中序后继,中序前驱是其父亲。
(2):
插入的节点t是左儿子,t的中序前驱是其父亲的中序前驱,中序后继是其父亲。
结点删除算法:
删除的情况与搜索二叉树的删除的类似
(1):
删除的节点p是叶子节点,直接删除,修改其父亲的线索。
删除的节点p有一个儿子,p有一个左儿子,以p为根的左子树中的具有最大值节点的t中序后继是p的中序后继,中序前驱不变;
p有一个右儿子,以p为根的右子中的具有最小值节点t中序前驱是p的中序前驱,中序后继不变。
(3):
删除的节点p有二个儿子,转化为叶子节点或只有一个儿子节点的删除。
2.数据结构设计:
抽象数据类型二叉树的定义如下:
ADTBinaryTree{
数据对象D:
D是具有相同特性的数据元素的集合。
数据关系R:
若D=φ,则R=φ,称BinaryTree为空二叉树;
若D=φ,则R={H},H是如下二元关系:
(1)在D中存在唯一的成为根的数据元素root,它在关系H下无前驱;
(2)若D—{root}≠φ,则存在D—{root}=(D1,Dr),且D1∩Dr=φ;
(3)若D1≠φ,则D1中存在惟一的元素X1,<
root,X1>
∈H,且存在D1上的关系H1∈H;
若Dr≠φ,则Dr中存在惟一的元素Xr,<
root,Xr>
∈H,且存在Dr上的关系Hr∈H,H={<
<
H1,Hr};
(4)(D1,{H})是一颗符合本定义的二叉树,称为根的左子树,(Dr,{Hr})是一颗符合本定义的二叉树,称为根的右子树。
基本操作P:
*CreatTree()
操作结果:
建立二叉树树函数,返回根指针
Inorder(*T)
初始条件:
二叉树已存在,已知其根结点。
中序遍历输出各结点二叉树。
PreThread(*root)
中序线索化二叉树。
PrintIndex(*t)
输出线索二叉树的线索。
*SearchChild(*point,findnode)
二叉树已存在,已知其根结点;
已知结点的数据。
返回数据对应的结点;
若不存在此结点,则返回“空”。
*SearchPre(*point,*child)
已知其孩子结点。
返回child父亲结点;
Insert(*root)
将要插入的结点插到要插的目标结点之前,并实现它线索化的恢复;
若目标结点不存在,则输出“没有找到结点”。
*DeleteNode(*t)
删除目标结点,,并实现它线索化的恢复;
若目标结点不存在,则输出
“没有找到结点”。
3.软件结构设计:
模块(函数名,返回类型,形式参数类型)[调用的函数所对应的序号]1)创建二叉树(CreatTree,void,);
2)中序遍历二叉树(Inorder,void,Bithptr*T)3)中序线索化二叉树(PreThread,void,Bithptr*root)
4)输出线索二叉树(PrintIndex,void,Bithptr*t)
5)查找数据结点(SearchChild,Bithptr,Bithptr*point\charfindnode)
6)查找父亲结点(SearchPre,Bithptr,Bithptr*point\Bithptr*child)
7)插入结点(Insert,void,Bithptr*root)[5]
8)删除结点(DeleteNode,Bithptr,Bithptr*t)[5,6]
9)主程序模块(main,void,)[1,2,3,4,7,8]
三、详细设计
1.结点类型
typedefstructnode
{
intltag,rtag;
structnode*lchild,*rchild;
chardata;
}Bithptr;
//结点
2.二叉树的实现
void*CreatTree()
//建立二叉树
voidInorder(Bithptr*T)
//中序遍历二叉树
3.线索二叉树的实现
voidPreThread(Bithptr*root)
//中序线索化二叉树voidPrintIndex(Bithptr*t)
//输出线索二叉树
voidInsert(Bithptr*root)
//插入结点
voidDeleteNode(Bithptr*root)
//删除结点
4.全局变量
Bithptr*Q[maxsize];
Bithptr*pre=NULL;
5.主函数
voidmain()
Bithptr*T;
inti;
T=CreatTree();
printf("
\n"
);
i=1;
while(i)
printf("
\t1中序输出二叉树\n"
\t2进行二叉树线索化\n"
\t3进行插入操作\n"
\t4进行删除操作\n"
\t5输出线索二叉树\n"
\t0退出\n"
\t请选择:
"
scanf("
%d"
&
i);
switch(i)
case1:
Inorder(T);
break;
case2:
PreThread(T);
\t已经实现二叉树的线索化,(可选择'
查看线索)\n"
break;
case3:
Insert(T);
case4:
T=DeleteNode(T);
case5:
PrintIndex(T);
default:
error\n\t请继续选择:
}
Bithptr*CreatTree() //创建二叉树
charch;
intfront,rear;
Bithptr*T,*s;
T=NULL;
front=1;
rear=0;
**********************************\n"
* *\n"
*课程设计题目:
线索二叉树的运算.*\n"
创建二叉树,请依次输入,@表示虚结点,以#结束\n"
ch=getchar();
while(ch!
='
#'
)
s=NULL;
if(ch!
@'
s=(Bithptr*)malloc(sizeof(Bithptr));
s->
data=ch;
s->
lchild=NULL;
rchild=NULL;
ltag=0;
rtag=0;
rear++;
Q[rear]=s;
if(rear==1)
T=s;
else
if(s!
=NULL&
&
Q[front]!
=NULL)if(rear%2==0)
Q[front]->
lchild=s;
rchild=s;
if(rear%2==1)
front++;
ch=getchar();
returnT;
voidInorder(Bithptr*
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 线索 二叉 应用