1.二叉线索树的数据结构实现
/*二叉树的线索存储结构定义*/
typedef enum {Link,Thread} PointerTag; /*Link==0表示指向左右孩子指针*/
typedef struct BiThrNode
{
TElemType data; /*节点数据*/
struct BiThrNode *lchild, *rchild; /*左右孩子指针*/
PointerTag LTag;
PointerTag RTag; /*左右标志*/
}BiThrNode, *BiThrTree;
2.中序遍历二叉树线索化
void InThreading(BiThrTree p)
{
if(p)
{
InThreading(p->lchild);
if (!p->lchild) /*没有左孩子*/
{
p->LTag = Thread;
p->lchild = pre;
}
if (!pre->rchild) /*没有右孩子*/
{
p->RTag = Thread;
pre->rchild = p;
}
pre = p;
InThreading(p->rchild);
}
}
3.中序遍历二叉线索链表表示的二叉树T
//中序遍历二叉线索链表表示的二叉树T
//T指向头结点,头结点的左链指向根节点,头结点的右链指向中序遍历的最后一个结点。
int InOrderTraverse_Thr(BiThrTree T)
{
BiThrTree p;
p = T->lchild; /*p指向根节点*/
while (p != T)
{
while (p->LTag == Link)/*当LTag==0时循环到中序序列第一个结点*/
{
p = p->lchild;
}
cout << p->data; /*显示结点数据*/
while (p->RTag == Thread&&p->rchild != T)
{
p = p->rchild;
cout << p->data;
}
p = p->rchild;
}
return 0;
}