线索二叉树
类似链表,二叉树中的每个数据都有前驱和后继指针,称为线索,加上线索的二叉树就叫做线索二叉树。
如图:
线索二叉树的实现
将二叉链表的空指针改为前驱或后继的线索。
定义一个二叉树线索存储结构:
typedef struct Node
{
int data;
struct Node *ltag;//前驱指针
struct Node *rtag;//后继指针
}BirthNode,*Birthtree;
遍历的代码如下:
void InThreading(BiThrTree p)
{
if(p)
{
InThreading(p->lchild);
if(!p->lchild)
{
p->LTag=Thread; // 前驱线索
p->lchild=pre; // 左孩子指针指向前驱
}
if(!pre->rchild) //前驱没有右孩子
{
pre->RTag=Thread; // 后继线索
pre->rchild=p; // 前驱右孩子指针指向后继(当前结点p)
}
pre=p; // 保持pre指向p的前驱
InThreading(p->rchild); // 递归右子树线索化
}
}