- 论坛徽章:
- 0
|
typedef enum PointerTag{Link = 0,Thread = 1};
typedef struct BiThrNode
{
char data;
struct BiThrNode *lchild,*rchild;
PointerTag LTag,RTag;
}BiThrNode,*BiThrTree;
int InOrderThreading(BiThrTree &Thrt,BiThrTree T)
{
//中序遍历二叉树T,并将其中序线索化,Thrt指向头结点
if(!(Thrt = (BiThrTree)malloc(sizeof(BiThrNode))))exit(-1);
Thrt->LTag = Link;Thrt->RTag = Thread;//建头结点
Thrt->rchild = Thrt;
if(!T)Thrt->lchild = Thrt;//若二叉树为空,则左指针会指
else
{
Thrt->lchild = T;pre = Thrt;
InThreading(T);//中序遍历进行中序线索化
pre->rchild = Thrt;pre->RTag = Thread;//最后一个结点线索化
Thrt ->rchild = pre;
}
return true;
}//InOrderThreading
void InThreading(BiThrTree p)
{
if(p)
{
InThreading(p->lchild);//左子树线索化
if(!p->lchild){p->RTag = Thread;p->lchild = pre;}//前驱线索
if(!pre->lchild){pre->RTag = Thread;pre->rchild = p;}//后继线索
pre = p;
InThreading(p->rchild);//右子树线索化
}
}//InThreading |
|