数据结构之二叉树的线索化实现

来源:互联网 发布:淘宝卖家账号是什么 编辑:程序博客网 时间:2024/06/07 02:36
/************************二叉树的线索化*****************/#include"stdio.h"#include"stdlib.h"#define ERROR 0#define OK 1typedef int Status;typedef char ElemType;typedef enum{LINK,THREAD}PointTag;/*LINK==0表示指向左右孩子  THREAD==1表示指向前驱或者后继*/typedef struct TheBiTNode{ElemType data;PointTag ltag,rtag;struct TheBiTNode *lchild, *rchild;}ThrBiTNode, *ThrBiTree;ThrBiTree pre;/************************Operator*******************/ThrBiTree CreateBiTree()//构造二叉树{ElemType ch;ThrBiTree T;scanf(" %c",&ch);if('#'==ch){T=NULL;}else {T=(ThrBiTree)malloc(sizeof(ThrBiTNode));T->data=ch;T->ltag=LINK;T->rtag=LINK;T->lchild=CreateBiTree();T->rchild=CreateBiTree();}return T;}void InThreading(ThrBiTree 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);}}  Status InOrderThreading(ThrBiTree Head,ThrBiTree T)//进行二叉树线索化{      Head->ltag = LINK;      Head->rtag = THREAD;      Head->rchild = Head;      if(!T)          Head->lchild = Head;      else      {          Head->lchild = T;             pre=(ThrBiTree)malloc(sizeof(ThrBiTNode));           pre = Head;        InThreading(T);          pre->rchild = Head;        pre->rtag = THREAD;          Head->rchild = pre;      }      return OK;  }Status InOrderTraverse_Thr(ThrBiTree Head)//中序遍历线索二叉树{ThrBiTree p;p=Head->lchild;while(p!=Head){while(p&&p->ltag==LINK)p=p->lchild;printf("%6c",p->data);while(p&&p->rtag==THREAD && p->rchild!=Head){p=p->rchild;printf("%6c",p->data);}p=p->rchild;}return OK;}void PreOrderTraverse(ThrBiTree T)//前序遍历{if(T!=NULL){printf("%c    ",T->data);PreOrderTraverse(T->lchild);PreOrderTraverse(T->rchild);}}main(void){ThrBiTree T,head;head=(ThrBiTree)malloc(sizeof(ThrBiTNode));T=CreateBiTree();PreOrderTraverse(T);printf("xaxdjh\n");InOrderThreading(head,T);printf("xaxdjhasfcdahgdfajfd\n");InOrderTraverse_Thr(head);}/*********************************************//****          测试用例                   ****//****     A B C # # # D E # # F # #       ****//*********************************************/

0 0
原创粉丝点击