先序线索化Word文档下载推荐.docx
- 文档编号:16764226
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:7
- 大小:27.13KB
先序线索化Word文档下载推荐.docx
《先序线索化Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《先序线索化Word文档下载推荐.docx(7页珍藏版)》请在冰豆网上搜索。
#include"
Base.cpp"
template<
classT>
classCPreThreading:
publicCThr<
T>
{
boolIsThreaded;
public:
CPreThreading(){IsThreaded=false;
}
voidPre_ThreadBiTree();
//生成先序线索二叉树
voidPre_Thread(BiThrNode<
*p,BiThrNode<
**h);
//先序线索
voidPre_TraThrBiTree();
//遍历先序线索二叉树
voidShowPreTree();
//显示线索化后的信息
};
voidCPreThreading<
:
Pre_ThreadBiTree()
{//生成先序线索二叉链表
BiThrNode<
*bt,*q=NULL;
bt=BT;
//根结点
Pre_Thread(bt,&
q);
//--------------------------------------------------------------------------------
Pre_TraThrBiTree()
if(IsThreaded==false){cout<
<
"
请先线索化!
endl;
return;
cout<
\n--------------------------------------------------"
遍历先序线索二叉树得:
;
*p;
if(BT==NULL)return;
//二叉链表为空
BT->
data<
'
'
//输出根结点的值
p=BT->
lchild;
//沿左子树
if(p==NULL)p=BT->
rchild;
//左子树为空则沿右子树
while(p!
=NULL)
{
cout<
p->
//输出当前结点的值
while(p->
lflag==0)//沿左链访问直到左标志非0
{
p=p->
cout<
}
p=p->
}
Pre_Thread(BiThrNode<
*bt,BiThrNode<
**h)
*p,*q;
//定义两个结点指针变量
if(bt!
=NULL)//bt指向的结点不空
p=bt->
lchild;
q=bt->
rchild;
//若当前访问的结点的左指针为空,则将上次访问的结点赋给左指针域,并置标志域
if((*h!
=NULL)&
&
(p==NULL))
bt->
lchild=*h;
lflag=1;
//若上次访问的结点的右指针为空
//则将访问过的结点指针赋给当前结点的右指针域,并置标志域为1
((*h)->
rchild==NULL))
(*h)->
rchild=bt;
rflag=1;
*h=bt;
//记下当前访问的结点
Pre_Thread(p,h);
//访问左子树
Pre_Thread(q,h);
//访问右子树
IsThreaded=true;
ShowPreTree()
下面显示的是先序线索化以后的结果:
//二叉链表为空。
if(BT->
lflag==1)//如果标志域为1,输出它的前驱。
值为:
结点的前驱是:
lchild->
rflag==1)//如果标志域为1,输出它的后继。
结点的后继是:
rchild->
//沿左子树。
//左子树为空则沿右子树。
if(p->
lflag==0)//沿左链访问直到左标志非0
if(p->
lflag==1)//如果标志域为1,输出它的前驱。
cout<
rflag==1)//如果标志域为1,输出它的后继。
--------------------------------------------------"
voidmain()
intopr;
//操作变量
CPreThreading<
int>
Tr;
//创建一个int模板类型的对象
do{
system("
cls"
);
----------菜单---------------"
--*1:
创建二叉树*--"
--*2:
先序线索化二叉树*--"
--*3:
先序线索化二叉树先序遍历*--"
--*4:
显示先序线索信息*--"
--*5:
退出操作*--"
--------------------------------"
请选择操作[]"
\b\b"
cin>
>
opr;
switch(opr)
case1:
if(Tr.GetRoot())Tr.DeleteNode();
//释放之前创建的对象的所有结点空间
Tr.CreateBiTree(-1);
//创建二叉树
system("
pause"
break;
case2:
Tr.Pre_ThreadBiTree();
//先序线索化二叉树
线索化完成!
case3:
Tr.Pre_TraThrBiTree();
//先序遍历二叉树
case4:
Tr.ShowPreTree();
//显示线索化之后的标志域信息
case5:
结束运行,Bye-Bye!
default:
选择不合理,请重选!
}while(opr!
=5);
3.程序运行
4.调试感想
在线索化二叉树时,如果像书上把二叉树和线索二叉树的存储结构分开,则二叉树中的数据域不能传递到线索二叉树中(两个类型的指针不能互相赋值)。
比较两种存储结构发现,线索二叉树比二叉树多了两个标志域LTag,Rtag。
于是两种存储结构合并为BiThrNode,并在建立二叉树时把LTag,Rtag均设置为Link。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 线索