线索二叉树
文章目录
1 线索二叉树的基本概念
对一棵二叉树中所有结点的空指针域按照某种遍历方式加线索的过程叫作线索化,被线索化了的二叉树称为线索二叉树(Threaded binary tree)。
引入线索二叉树的目的是:加快查找结点前驱和后继的速度。
注:概念题也是会考的!( ^ ^)/~
2 线索二叉树的构造
2.1 线索二叉树的存储结构
简单来说,ltag和rtag的作用:标明指针是否用作线索标志。
二叉树的存储结构代码描述如下:
typedef struct TBTNode{
ElemType data; //数据元素
struct TBTNode *lchild, *rchild; //左右孩子指针
int ltag, rtag; //左右线索标志
}TBTNode;
2.2 给线索二叉树画线索
2.2.1 中序
以下图的一棵二叉树为例,我们首先来讲解一下中序线索二叉树的建立过程:
第一步,写出它的中序遍历序列,于是我们可以得到序列为:CBEGDFA。
第二步,根据中序序列,画出线索即可:
从中序遍历序列的第一个结点看起。也就是C结点,因为左右孩子均为空,所以得画上两条线索。因为中序序列CBEGDFA中,C前面没字母,换言之就是在中序序列中没有前驱,所以左边的线索指向NULL,而C的后面一个字母是B,故结点右边的线索指向B结点。
再来看E结点,因为左孩子为空,所以只需画上一条左边的线索。因为中序序列CBEGDFA中,E前面字母是B,换言之就是在中序序列中E的前驱结点是B,所以左边的线索指向B结点。
就这么简单~
2.2.2 先序
以下图的一棵二叉树为例,我们首先来讲解一下先序线索二叉树的建立过程:
第一步,写出它的先序遍历序列,于是我们可以得到序列为:RADEBCFGHK。
然后根据遍历序列前后字母位置关系画线索即可。
2.2.3 后序
第一步,写出它的后序遍历序列,于是我们可以得到序列为:bcjdahigfe。
然后根据后序遍历序列顺序给空孩子添加前驱后继线索即可。
比如j结点,左右孩子为空,那么需添加两条线索。因为后序遍历序列中j前面是c,后面是d,于是j左线索指向c,右线索指向d。
2.3 二叉树线索化代码实现
2.3.1 通过中序遍历线索化
通过中序遍历对二叉树线索化的递归算法如下:
二叉树的存储结构代码:
typedef struct TBTNode{
char data; //数据元素
struct TBTNode *lchild, *rchild; //左右孩子指针
int ltag, rtag; //左右线索标志

线索二叉树是一种通过在二叉树节点的空指针域添加线索,加速查找前驱和后继节点的数据结构。文章详细介绍了线索二叉树的构造过程,包括中序、先序和后序线索化的方法,并提供了相应的代码实现。此外,还阐述了线索二叉树的遍历策略,如中序、先序和后序遍历的具体步骤。

5970

被折叠的 条评论
为什么被折叠?



