jeonkc 2020-05-31
能够运行的线索二叉树代码,保证看得懂,后期会专门出一篇文章讲线索二叉树是如何遍历的
这里注意:pre定义为全局变量
Node *pre=NULL;
void inthread(Node *p)
{
if(p!=NULL)
{
inthread(p->left);
if(p->left==NULL)
{
p->ltag=1;
p->left=pre;
}
if(pre!=NULL&&pre->right==NULL)
{
pre->rtag=1;
pre->right=p;
}
pre=p;
inthread(p->right);
}
}
void creatInthread(Node *node)
{
if(node!=NULL)
{
inthread(node);
pre->right=NULL;
pre->rtag=1;
}
}
Node* next(Node *p)
{
Node *q=NULL;
if(p->rtag==1)
q=p->right;
else
{
q=p->right;
while(q->ltag==0)
q=q->left;
}
return q;
}
void RunInthread(Node *node)
{
if(node==NULL)
return;
Node *p=node;
if(p!=NULL)
{
while(p->ltag==0)
{
p=p->left;
}
printf("%d\t",p->data);
while(p->right!=NULL)
{
p=next(p);
printf("%d\t",p->data);
}
}
}