创建并线索化一颗二叉树
#include "stdio.h"
#include "stdlib.h"
typedef char Elemtype ;
typedef enum{Link,Thread} PointerTag;
typedef struct BiTNode{
Elemtype data;
struct BiTNode *lchild;
struct BiTNode *rchild;
PointerTag ltag,rtag;
}BiTNode,*BiTtree;
BiTtree pre;
//创建一棵线索二叉树
void CreateBiTtree(BiTtree *T){
char c;
scanf("%c",&c);
if(' '==c){
(*T)=NULL;
}
else{
(*T)=(BiTNode*)malloc(sizeof(BiTNode));
(*T)->data=c;
(*T)->ltag=(*T)->rtag=Link;
CreateBiTtree(&(*T)->lchild);
CreateBiTtree(&(*T)->rchild);
}
}
//中序遍历线索二叉树
void zhongxubianli(BiTtree T){
if(T){
zhongxubianli(T->lchild);
if(!T->lchild){
T->ltag=Thread;
T->lchild=pre;
}
if(!pre->rchild){
pre->rtag=Thread;
pre->rchild=T;
}
pre=T;
zhongxubianli(T->rchild);
}
}
void InOrderThreading(BiTtree *p,BiTtree T){
*p=(BiTtree)malloc(sizeof(BiTNode));
(*p)->ltag=Link;
(*p)->rtag=Thread;
(*p)->rchild=(*p);
if(!T){
(*p)->lchild=(*p);
}
else{
(*p)->rchild=T;
pre=(*p);
zhongxubianli(T);
pre->rchild=(*p);
pre->rtag=Thread;
(*p)->rchild=pre;
}
}
void main(){
BiTtree P,T=NULL;
CreateBiTtree(&T);
InOrderThreading(&P,T);
}