线索二叉树的基本概念


线索二叉树的基本概念

在二叉树的学习中,我们知道,在有 n n n个结点的二叉树中,有 n − 1 n-1 n1个空指针。这是因为每个叶结点有2个空指针,而每个度为1的结点有1个空指针,总的空指针数为 2 n 0 + n 1 2n_0+n_1 2n0+n1,又 n 0 = n 2 + 1 n_0=n_2+1 n0=n2+1,所以总的空指针数为 n 0 + n 1 + n 2 + 1 = n + 1 n_0+n_1+n_2+1=n+1 n0+n1+n2+1=n+1

为此,可以改造二叉树的结点,在结点的空指针域中存放该结点在某种遍历次序下的前驱结点或后继结点的指针,并称之为线索。对一棵二叉树中的所有结点的空指针域按照某种遍历次序加线索的过程叫做线索化,被线索化了的二叉树称作线索二叉树

引入线索二叉树是为了加快查找结点前驱和结点后继的速度

在空的左指针域中存放的指向其前驱结点的指针叫做前驱线索,在空的右指针域中存放的指向其后继结点的指针叫做后继线索


线索二叉树的构造

在二叉树线索化时,通常规定:若无左子树,令 l c h l i d lchlid lchlid指向其前驱结点;若无右子树,令 r c h i l d rchild rchild指向其后继结点。
为此,还需要增加两个标志域表明当前指针域所指的对象是指向左(右)子结点还是指向其直接前驱(后继)。

在这里插入图片描述

其中,标志域的含义如下:
l t a g { 0 , l c h i l d 域 指 示 结 点 的 左 孩 子 1 , l c h i l d 域 指 示 结 点 的 直 接 前 驱 r t a g { 0 , r c h i l d 域 指 示 结 点 的 右 孩 子 1 , r c h i l d 域 指 示 结 点 的 直 接 后 继 ltag\begin{cases} 0,\quad lchild域指示结点的左孩子\\ 1,\quad lchild域指示结点的直接前驱\\ \end{cases} \quad\quad rtag\begin{cases} 0,\quad rchild域指示结点的右孩子\\ 1,\quad rchild域指示结点的直接后继\\ \end{cases} ltag{0lchild1lchildrtag{0rchild1rchild

用不同的顺序遍历二叉树,在遍历过程中将线索加入到空的指针域,可得到相应的线索二叉树。

中序线索二叉树的建立为例:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值