1、线索二叉树的基本概念:
在二叉树的每个结点中增加两个指针域,用于存放遍历二叉树时得到的直接前驱和直接后继的信息。
2、线索二叉树的结点构造:
ltag=0时,表示lchild指向结点的左孩子,lchild是一个指针(结点有左孩子)
ltag=1时,表示lchild指向结点的直接前驱,lchild是一个线索(结点无左孩子)
rtag=0时,表示rchild指向结点的右孩子(结点有右孩子)
rtag=1时,表示rchild指向结点的直接后继(结点无右孩子)
线索二叉树的结点定义:
typedef struct TNode{
char data;
int ltag,rtag;
struct TNode *lchild;
struct TNode *rchild;
}TNode;
3、以p为根结点的二叉树中序线索化:
void InThread (TNode *p,*pre){
pre->rchild=NULL;
if( p ){
InThread(p->lchild,pre);
if(!p->lchild)
{
p->ltag=1;
p->lchild=pre;
}
else p->ltag=0;
if(!pre->rchild&&pre!=NULL)
{
pre->rtag=1;
pre->rchild=p;
}
else pre->rtag=0;
pre=p;
InThread(p->rchild,pre);
}