- 树为什么要线索化?
- 树如何线索化?
- 遍历线索树
1、树为什么要线索化?
n个结点的二叉链表共有2n个链域,非空链域为n-1个,但其中的空链域却有n+1个。因此,提出了一种方法,利用原来的空链域存放指针,指向树中其他结点。这种指针称为线索。
2、树如何线索化(中序)?
以中序线索化为例
- 如果ptr->lchild为空,则存放指向中序遍历序列中该结点的前驱结点。这个结点称为ptr的中序前驱;
- 如果ptr->rchild为空,则存放指向中序遍历序列中该结点的后继结点。这个结点称为ptr的中序后继;
代码如下:
void MakeThread(BithrNode* tree, BithrNode* ptr)
{
if (tree != NULL)
{
MakeThread(tree->lTree, ptr);
if (tree->lTree == NULL)
{
tree->lTree = ptr;
tree->Ltag = THREAD;
}
if (ptr != NULL && ptr->rTree == NULL)
{
ptr->rTree = tree;
ptr->Rtag = THREAD;
}
ptr = tree;
MakeThread(tree->rTree, ptr);
}
}
void MakeThreadTree(Bith