线索二叉树改写

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/*1、线索二叉树的创建和遍历操作算法的实现

编程实现二叉树的线索链表存储表示的基本操作,这些基本操作包括:线索二叉树的创建、线索二叉树的中序遍历算法的实现。要求对程序中的一些关键语句要有注释,并能够进行简单

的输入输出验证。*/

#include

#include

typedef int Status;

typedef char TElemType;

typedef enum PointerTag {Link,Thread};

typedef struct BiThrNode{

TElemType data;

struct BiThrNode *lchild,*rchild;

PointerTag LTag,RTag;

}BiThrNode,*BiThrTree;

void CreateBiTree(BiThrTree &T){

char ch;

scanf("%c",&ch);

if(ch=='#') T=NULL;

else{

T=(BiThrTree)malloc(sizeof(BiThrNode));

T->data=ch;

T->LTag=Link;

T->RTag=Link;

// printf("%c;L",ch);

CreateBiTree(T->lchild);

// printf("%c;R",ch);

CreateBiTree(T->rchild);

// printf("%c;O",ch);

}

}

BiThrTree pre;

void InThreading(BiThrTree p){

if(p)

{

InThreading(p->lchild);

if(!p->lchild)

{

p->LTag=Thread;

p->lchild=pre;

}

if(!pre->rchild)

{

pre->RTag=Thread;

pre->rchild=p;

}

pre=p;

InThreading(p->rchild);

}

}

void InOrderThreading(BiThrTree &Thrt,BiThrTree T) {

Thrt=(BiThrTree)malloc(sizeof(BiThrNode));

if(!Thrt) return ;

Thrt->LTag=Link;Thrt->RTag=Thread;

Thrt->rchild=Thrt;

if(!T) Thrt->lchild=Thrt;

else{

Thrt->lchild=T;

pre=Thrt;

InThreading(T);

pre->rchild=Thrt;

pre->RTag=Thread;

Thrt->rchild=pre;

}

}

void Visit(TElemType e)

{

printf("%c",e);

}

void InOrderTraverse(BiThrTree T){

BiThrTree p;

p=T->lchild;

while(p!=T){

while(p->LTag==Link)

p=p->lchild;

Visit(p->data);

while(p->RTag==Thread&&p->rchild!=T){

p=p->rchild;

Visit(p->data);

}

p=p->rchild;

}

}

int main()

{

BiThrTree T,L;

CreateBiTree(T); InOrderThreading(L,T); InOrderTraverse(L); return 0;

}

相关文档
最新文档