#include
typedef char elemtype ;
typedef enum{ Link , Thread } PointerTag;
typedef struct node{
elemtype data;
PointerTag leftChildTag,rightChildTag;
struct node *leftChild, *rightChild;
}ThreadBitreeNode,*ThreadBitree;
//先序创建线索二叉树
void InOrderThreadBitreeCreate(ThreadBitree &T)
{
char ch;
cin>>ch;
if(ch!='*')
{
T=new ThreadBitreeNode;
T->data=ch;
T->leftChildTag=T->rightChildTag=Link;
T->leftChild=NULL;
T->rightChild=NULL;
InOrderThreadBitreeCreate(T->leftChild);
InOrderThreadBitreeCreate(T->rightChild);
}
else T=NULL;
}
//中序线索化二叉树
void Threading(ThreadBitree p,ThreadBitree &pre)
{
if(p)
{
Threading(p->leftChild,pre);
if(p->leftChild==NULL)
{
p->leftChild=pre;
p->leftChildTag=Thread;
}
if(pre->rightChild==NULL)
{
pre->rightChild=p;
pre->rightChildTag=Thread;
}
pre=p;
Threading(p->rightChild,pre);
}
}
void InOrderThread(ThreadBitree &T,ThreadBitree &head)
{
head=new ThreadBitreeNode;
head->leftChildTag=Link;
head->rightChildTag=Thread;
head->rightChild=head;
if(T==NULL)head->leftChild=head;
else
{
head->leftChild=T;
ThreadBitree pre;
pre=head;
Threading(T,pre);
pre->rightChild=head;
pre->rightChildTag=Thread;
head->rightChild=pre;
}
}