#include<bits/stdc++.h>
typedef struct node
{
char data;
int ltag,rtag;
struct node *lchild,*rchild;
}TBTNode;
TBTNode *pre;
void Greate(TBTNode *&b)
{
char ch;
scanf("%c",&ch);
if(ch=='#') b=NULL;
else
{
b=(TBTNode *)malloc(sizeof(TBTNode));
b->data=ch;
Greate(b->lchild);
Greate(b->rchild);
}
}
void Thread(TBTNode *&p)
{
if(p!=NULL)
{
Thread(p->lchild);
if(p->lchild==NULL)
{
p->lchild=pre;
p->ltag=1;
}
else p->ltag=0;
if(pre->rchild==NULL)
{
pre->rchild=p;
pre->rtag=1;
}
else pre->rtag=0;
pre=p;
Thread(p->rchild);
}
}
TBTNode *GreateThread(TBTNode *b)
{
TBTNode *root;
root=(TBTNode*)malloc(sizeof(TBTNode));
root->ltag=0;
root->rtag=1;
root->rchild=b;
if(b==NULL) root->lchild=root;
else
{
root->lchild=b;
pre=root;
Thread(b);
pre->rchild=root;
pre->rtag=1;
root->rchild=pre;
}
return root;
}
void ThInOrder(TBTNode *tb)
{
TBTNode *p=tb->lchild;
while(p!=tb)
{
while(p->ltag==0) p=p->lchild;
printf("%c",p->data);
while(p->rtag==1 && p->rchild!=tb)
{
p=p->rchild;
printf("%c",p->data);
}
p=p->rchild;
}
}
int main()
{
TBTNode *b;
TBTNode *T;
Greate(b);
T=GreateThread(b);
ThInOrder(T);
return 0;
}
中序线索二叉树的创建与输出
猜你喜欢
转载自blog.csdn.net/2302_77099705/article/details/130912081
今日推荐
周排行