//线索化
//线索二叉树
typedef struct Threadnode
{
int data;
struct Threadnode* lchild;
struct Threadnode* rchild;
int ltag = 0;
int rtag = 0;
}*ThreadTree;
//中序遍历线索化
void InThreadTree(ThreadTree T, ThreadTree pre)
{
ThreadTree p;
if (p)
{
InThreadTree(p->lchild,pre);
if (p->lchild=NULL)
{
p->lchild = pre;
p->ltag = 1;
}
if (p->rchild==NULL)
{
pre->rchild = p;
pre->rtag = 1;
}
pre = p;
InThreadTree(p->rchild, pre);
}
}
int Thread(ThreadTree T)
{
if (!T)
return 0;
ThreadTree pre=NULL;
InThreadTree(T,pre);
pre->rchild = NULL;
pre->rtag = 1;
return 1;
}
//线索树遍历
ThreadTree first(ThreadTree T)
{
ThreadTree p = T;
while (p->ltag == 0)
{
p = p->lchild;
}
return p;
}
ThreadTree next(ThreadTree T)
{
if (T->rtag == 0)
return first(T->rchild);
return T->rchild;
}
void Inorder(ThreadTree T)
{
for (ThreadTree p = first(T); p != NULL; p = next(T))
cout << p->data;
}
线索二叉树
最新推荐文章于 2021-03-12 11:51:10 发布