// -----二叉树的二叉线索存储表示-----
typedef enum{Link,Thread}PointerTag; // 指针标志:0为指针,1为线索
typedef struct BiThrNode{
TElemType data; // 结点元素信息
struct BiThrNode *lchild,*rchild; // 左右孩子指针
PointerTag LTag; // 左标志
PointerTag RTag; // 右标志
}BiThrNode, *BiThrTree;
Status InOrderThreading(BiThrTree* Thrt,BiThrTree T) // T为要线索化的二叉树
{
BiThrTree pre;
(*Thrt)=(BiThrTree)malloc(sizeof(BiThrNode)); // 为线索树设置一个头结点
(*Thrt)->LTag=Link; // 头结点左标志设为Link
(*Thrt)->RTag=Thread; // 头结点右标志设为Thread
(*Thrt)->rchild=*Thrt; // 回收右指针
if (!T) (*Thrt)->lchild=Thrt; // 若要线索化的二叉树为空,则回收左指针
// 二叉树不为空,则
else
{
(*Thrt)->lchild=T; // 头结点左指针指向二叉树的根节点
pre=*Thrt;
pre=InThreading(T,pre); // 为二叉树T每一个结点线索化过程,具体内容见下一份源码
pre->RTag=Thread; // 最后一个遍历的结点右指针指向线索树头结点
pre->rchild=*Thrt;
(*Thrt)->rchild=pre;