线索二叉树

二叉树在一般情况下是无法直接找到某结点在某种遍历序列下的前驱和后继结点;

若直接增加两个指针域来存放结点的前驱和后继的信息,将大大地降低存储空间的利用率;

所以,我们有必要对二叉树进行线索化,在节省存储空间的前提下,能在某个结点寻到其前驱与后继结点的信息;

先说明几个名词:

线索:指向结点前驱或后继的指针

线索二叉树:加了线索的二叉树

线索化:对二叉树以某种次序遍历使其变为线性二叉树的过程

 

二叉树的线索化过程:

利用结点的空指针域(即那些没有左子树或右子树的结点),来存放前驱或后继的信息;

为了区分指针域存放的是子树还是前驱后继,需在结点上增加两个标志位;

  修改前的标准结点:            对其进行线索化后的结点:

      typedef struct BTnode{        typedef struct BTnode{

  USER_TYPE data;             USER_TYPE data;

  BTnode *lchild;                BTnode *lchild;  

  BTnode *rchild;              BTnode *rchild; 

  }BTnode;                 int ltag,rtag;

                           }BTnode; 

 

当ltag=0时,lchild表示指向结点左孩子的指针;当ltag=1时,lchild表示指向结点的前驱;

当rtag=0时,rchild表示指向结点左孩子的指针;当rtag=1时,rchild表示指向结点的后继;

posted @ 2012-09-23 10:11  canlu  阅读(125)  评论(0)    收藏  举报