上一篇博客我介绍了广度优先遍历的基本实现原理,现在我来聊一聊二叉树的线索化。
众说周知当一个结点的左孩子或右孩子指针是空着的时候,为了不让结点的左孩子或右孩子指针空着,线索二叉树便随之产生了。引入线索二叉树的目的便是为了加快查找前驱和后继的速度。
线索二叉树的数据结构如图所示:
规定:若无左子树,令lchild指向其前驱节点;若无右子树,则令rchild指向其后继节点,还需加两个标志域标识指针是指向左右孩子还是指向前驱或后继的。
代码如下:
typedef char BiElem;
typedef struct ThreadNode {
BiElem data;
struct ThreadNode* lchild, * rchild;
int ltag, rtag;
}ThreadNode, * ThreadTree;
中序线索二叉树的结构较为简单,下面给出一张图片帮助读者理解代码含义: