线索二叉树

在这里插入图片描述
在这里插入图片描述
如上图所示,在二叉树中,每一个结点都包含三个基本信息:结点自身的数据信息,结点指向左子节点和右子节点的指针
然而从空间利用率上说,对于非满二叉树,我们发现经常会有结点空指针的情况出现,造成大量的空间浪费,为了更高效地利用空间,提高运行效率,我们针对二叉树进行改进,提出了线索二叉树,即二叉树的线索化。
在这里插入图片描述
图中为一个二叉树,其中用红色圆圈标注出来的都是结点的空指针

线索二叉树的改进原理与方法
通过比较前序遍历、中序遍历和后续遍历,我们发现当采用中序遍历时,含有空指针的结点往往均匀间隔存在,下图形象表明这一现象。在这里插入图片描述
红色字体表示含有空指针的结点,绿色表示完全利用了度为2的结点,即绿色结点是空间利用良好的结点,而红色表示空间利用不足尚待改进的结点。根据排布特点,我们可以考虑将空指针用于指向它前后的两个结点,即前驱和后继节点。
/

(了解的话此处可跳过)何为前驱和后继?

前驱结点:在中序遍历(二叉查找树的中序遍历即为从小到大的排序)的上一个结点,就是比这个数小的最大的数。
后继结点:在中序遍历的下一个点,就是比这个数大的最小的数。
例:上图中,对于D结点,H为D的前驱结点,I为D的后继节点。
/
但这是最理想的情况,有时候排布并不是如何恰到好处,例如:
在这里插入图片描述
在该图中,红色的表示含有两个空指针的结点,黄色的表示含有一个空指针的结点,故我们需要告诉计算机何时该指针指向子节点,何时该指针应该指向前驱/后继。
*

解决方案:

在lchild-data-rchild的结点结构基础上进行扩充,增加一个标识器tag来表示该处的指针的用途是指向子节点或前驱/后继,如tag=0,则指向子节点,如tag=1,则指向前驱/后继,这样就可以告诉计算机每个节点的指针应该如何利用。
在这里插入图片描述
以上就是线索二叉树的原理。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值