- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构作业(2)
年级: 2004 级(2)班
专业: 计算机科学与技术专业学号: 200431500066
姓名: 秦博纯
mainCreateT
main
CreateT
DispT…
Thread
CreaT…
ThIn
编写一个程序实现中序线索化二叉树,给出线索中序序列,并以图所示的二叉树 b 对程序进行验证。
解:本项目proj7_5 的组成结构如图所示,图中方框表示函数,方框中指出函数名,箭头方向表示函数间的调用关系,虚线方框表示文件的组成,即指出该虚线方框中的函数存放 在哪个文件中。
可以得到如下exp7_5.cpp 文件,其中包含如下函数。CreateTBTNode(TBTNode *b): 输出含空线索域的二叉树。Thread(TBTNode *p):由 CreatThread()调用,对二叉树进行中序线索化。CreaThread(TBTNode *b):中序线索化二叉树。
ThInOrder(TBTNode *tb):中序线索化二叉树中实现中序遍历。这些函数代码如下(设计思路详见代码中的注释):
Proj7_5 项目的程序结构图
Proj7_5
Proj7_5 项目组成
源程序如下:
#includestdio.h #includemalloc.h #define MaxSize 100 typedef char ElemType; typedef struct node
{
ElemType data; int ltag,rtag;
struct node *lchild; struct node *rchild;
}TBTNode;
void CreateTBTNode(TBTNode *b,char *str)
{
TBTNode *St[MaxSize],*p=NULL; int top=-1,k,j=0;
char ch; b=NULL;
ch=str[j]; while(ch!=\0)
{ switch(ch)
{
case (:top++;St[top]=p;k=1;break; case ):top--;break;
case ,:k=2;break;
default:p=(TBTNode *)malloc(sizeof(TBTNode)); p-data=ch;p-lchild=p-rchild=NULL; if(b==NULL)
b=p;
} j++;
ch=str[j];
}
}
else
{
}
switch(k)
{
case 1:St[top]-lchild=p;break; case 2:St[top]-rchild=p;break;
}
void DispTBTNode(TBTNode *b)
{
if(b!=NULL)
{
printf(%c,b-data);
if(b-lchild!=NULL||b-rchild!=NULL)
{
printf((); DispTBTNode(b-lchild);
if(b-rchild!=NULL) printf(,); DispTBTNode(b-rchild); printf());
}
}
}
TBTNode *pre;
void Thread(TBTNode *p)
{
if(p!=NULL)
{
Thread(p-lchild); if(p-lchild==NULL)
{
p-lchild=pre; p-ltag=1;
}
else p-ltag=0;
if(pre-rchild==NULL)
{
pre-rchild=p; pre-rtag=1;
}
else pre-rtag=0; pre=p;
Thread(p-rchild);
}
}
TBTNode *CreaThread(TBTNode *b)
{
TBTNode *root;
root=(TBTNode *)malloc(sizeof(TBTNode)); root-ltag=0;root-rtag=1;
root-rchild=b;
if(b==NULL)
root-lchild=root;
else
{
}
root-lchild=b; pre=root; Thread(b);
pre-rchild=root; pre-rtag=1;
root-rchild=pre;
return root;
}
void ThInOrder(TBTNode *tb)
{
TBTNode *p=tb-lchild; while(p!=tb)
{
while(p-ltag==0)p=p-lchild; printf(%c ,p-data);
while(p-rtag==1p-rchild!=tb)
{
p=p-rchild; printf(%c ,p-data);
文档评论(0)