线索二叉树的作用
数据结构与算法之线索二叉树
线索二叉树的作用
二叉树的中序遍历序列:D G B E A F C
思考一个问题:
- 能否从一个指定节点开始中序遍历?
- 如何找到指定节点
p
在中序遍历序列中的前驱?
思路:
-
从根节点出发,重新进行一次中序遍历,指针q记录当前访问的结点,指针
pre
记录上一次访问的结点。-
当
q==p
时,pre
为前驱- 当
pre=p
时,q
为后继
- 当
-
-
缺点:找前驱、后继很不方便,遍历操作必须从根出发,
-
此时这种场景就需要考虑中序线索二叉树了
中序线索二叉树
说明:n个结点的二叉树,用n+1个空链域!可用来记录前驱、后继的信息
指向前驱、后继的指针称为“线索”,观察下图可以发现,只有叶子节点有线索
- 前驱线索(由左孩子指针充当)
- 后继线索(由右孩子指针充当)
中序线索二叉树的存储结构
先看图,在看代码
普通二叉树节点
二叉树又称二叉链表
typedef struct BiTNode{
ElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
线索二叉树节点
线索二叉树又称为线索链表
typedef struct ThreadNode{
ElemType data;
struct ThreadNode *lchild,*rchild;
int ltag,rtag;//左右线索标志
}ThreadNode,*ThreadTree;
- 对应tag位为0时,表示指针指向其他孩子
- 对应tag位为1时,表示指针是线索
前序线索二叉树
具体细节参考中序线索二叉树
后序线索二叉树
具体细节参照中序线索二叉树