1.线索二叉树基本概念
- 二叉树是一种非线性结构,遍历二叉树几乎都是通过递归或者用栈辅助实现非递归的遍历。用二叉树作为存储结构时,取到一个节点,只能获取节点的左孩子和右孩子,不能直接得到节点的任一遍历序列的前驱或者后继。
- 为了保存这种在遍历中需要的信息,我们利用二叉树中指向左右子树的空指针来存放节点的前驱和后继信息,n个节点的二叉树中含有n+1个空指针域。
- 试做如下规定:
- 若结点有左子树,则其lchild域指示其左孩子,否则令lchild域指示其前驱;
- 若结点有右子树,则其rchild指示其右孩子,否则令rchild域指示其后继。
- 为避免混淆,尚需改变结点结构,增加两个标志域LTag和RTag。
- 其中:
- LTag=0时,lchild域指示结点的左孩子;LTag=1时,lchild域指示结点的前驱。
- RTag=0时,rchild域指示结点的右孩子;RTag=1时,rchild域指示结点的后继。
2.二叉树的二叉线索类型定义
typedef struct BiThrNode
{
TelemTpye data;
struct BiThrNode *lchild,*rchild; /*左右孩子指针*/
int LTag,RTag; /*左右标志*/
}BiThrNode,*BiThrTree;
- 以这种结点结构构成的二叉链表作为二叉树的存储结构,叫做线索链表。
- 指向结点前驱和后继的指针叫做线索。
- 加上线索的二叉树称之为线索二叉树。
- 对二叉树以某种次序遍历使其变成线索二叉树的过程叫做线索化。
- 由于线索二叉树构造的实质是将二又链表中的空指针改为指向前驱或后继的线索,而前驱或后继的信息只有在遍历时才能得