概念
普通二叉树 只能找到结点 左右孩子信息 该结点的直接前驱和直接后继只能在遍历过程中获得
若可将遍历后对应的有关前驱和后继预存 则从第一个结点开始 便可遍历整个树
运用叶子结点的悬空指针
可规定:
若结点有左子树 则lchild指向其左孩子
否则 lchild指向其直接前驱(即线索)
若结点有右子树 则rchild指向其右孩子 否则rchild指向其直接后继(即线索)
代码
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;}//后继线索
pre = p;//保持pre指向p的前驱
InThreading(p->rchild);//右子树线索化
}
}