“砖头变玉石”——深入浅出线索二叉树和普通二叉树间的相互转化

接触过数据结构的人对树、二叉树等有关树的名词都不会感到陌生。对于树的一些基本知识、概念这里就不再赘述了。本文主要是讲解一下线索二叉树、普通二叉树的转化。


在讲解这部分内容之前,有必要对线索二叉树做一些简短的介绍。


首先,为什么会出现线索二叉树这一名词?


我们先来看一下普通二叉树的存储结构:


结合一张图来看一下它的空间利用率:

从上图中可以看出,普通二叉树存在很多的null值,造成了空间的浪费。加入普通二叉树中存在着n个结点,那么此树中共有2n个指针,但是有效利用的只有n-1个,而余下的n+1个都没有被利用,是null。线索二叉树就是要将n+1个空指针利用起来,用于存储节点的前后关系。同时,线索链表解决了二叉链表找左、右孩子困难的问题。


那么线索二叉树是如何来实现上面提到的功能的呢?


线索二叉树的表示方式:


表面上看,线索二叉树多了两块区域:Lbit、Rbit。比普通二叉树多占用了空间,但是Lbit、Rbit是逻辑型的,每个只需要一个“位”就可以了,很省空间,不会造成浪费。那么它们两个有什么作用呢?其功能就是:


好了,介绍了线索二叉树的来龙去脉,下面就来讲讲如何将普通二叉树转化为线索二叉树


在这里有一个前提是:需要知道几个概念,二叉树树的前序遍历、后序遍历、中序遍历。在这里呢只是告诉大家一个简短的记忆方法。

前序遍历:根—左子树—右子树;后序遍历:左子树—右子树—根;中序遍历:左子树—根—右子树。


先睹为快:普通二叉树、线索二叉树直观图


步骤(我们以中序遍历为例):

首先将下面二叉树进行中序遍历,写出最后结果。


结果是:D B H E A F C G I

然后,将叶子结点的前继、后续,按照上面的结果的前后顺序连接在成线(红线表示后继)


对于其他两种遍历这里就不再赘述了,在这里只给出追后的结果,大家可以尝试自己动手。对于不懂的,可以联系我一起讨论。


对于普通二叉树转为线索二叉树的关键是先将普通二叉树的几种遍历顺序写出来,然后在理解线索二叉树的作用之后就可以完成他们之间的转化。





  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值