线索二叉树:将指向前驱和后继的指针称为线索,加上线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树。
其实线索二叉树相当于把一棵二叉树变成一个双向链表,这有利于方便插入删除结点和查找某个结点的操作。
线索化:对二叉树以某种次序遍历使其变为线索二叉树的过程。
线索二叉树的结点结构:
lchild - ltag - data - rtag - rchild
其中:
1、ltag为0使指向该结点的左孩子,为1时指向该结点的前驱。
2、rtag为0使指向该结点的右孩子,为1时指向该结点的后继。
3、在每个结点增设两个标志域ltag和rtag,这两个标志域只存放0和1数字的布尔型变量,其占用内存空间小于指针变量。
实现线索二叉树结构程序:
typedef enum {Link,Thread} PointerTag;
//link == 0表示指向左右孩子指针,Thread == 1表示指向前驱或后继的线索
typedef struct BiThrNode //二叉树线索存储结点