Bitree *pre;
int in_thread(Bitree *root)
{ if(root!=NULL)
{
in_thread(root->left);
if(pre->right == NULL)
{
pre->rtag=1;
pre->right =root;
}
else
pre->rtag=0;
if(root->left == NULL)
{
root->ltag=1;
root->left=pre;
}
else
root->ltag=0;
pre=root;
in_thread(root->right);
}
}
int create_thread_tree(Bitree *&troot,Bitree *root)
{
troot=(Bitree *)malloc(sizeof(Bitree));
troot->ltag=0;troot->rtag=1;
troot->right = root;
if(root==NULL)
{
troot->left =troot;
}
else
{
troot->left= root;
pre=root;
in_thread(root);
pre->rtag=1;
pre->right=troot;
troot->right=pre;
}
}
int mid_travers_thread(Bitree *troot)
{
Bitree *p;
p=troot->left;
while(p!=troot)
{
while(p->ltag!=1)
p=p->left;
printf("%2d ",p->data);
while(p->rtag==1&& p->right!=troot)
{
p=p->right;printf("%2d ",p->data);
}
p=p->right;
}
}