线索二叉树(C语言实现)

前面几节给大家依次介绍了二叉树的先序、中序、后序遍历,无论采用哪种遍历方式,最终可以得到一个由二叉树所有结点构成的线性序列。

以下图这棵二叉树为例:

图 1 二叉树

先序、中序和后序遍历二叉树,最终得到的线性序列分别是:

  • 先序序列:1 2 4 3
  • 中序序列:4 2 1 3
  • 后序序列:4 2 3 1

你可以这样理解,遍历二叉树的过程就是将非线性的树型结构转换为线性结构。在线性序列中,每个结点(除最后一个结点)都有自己的直接后继结点,每个结点(除第一个结点)也有自己的直接前驱结点。

整个遍历二叉树的过程,实则在不断地寻找各个结点的直接后继结点。当然在某些场景中,还可能需要寻找某个结点的直接前驱结点。在二叉树中,我们可以很容易地找到某个结点的孩子结点,但找到某个结点的前驱和后继结点是比较困难的,目前掌握的方法就只能遍历整棵二叉树。

本节给大家介绍一种更高级的存储方案,可以提高在二叉树中查找前驱和后继结点的效率,也可以提高遍历二叉树的效率,称为线索二叉树。

什么是线索二叉树

使用链表存储二叉树时,对于由 n 个结点组成的二叉树,整个存储结构中一定包含 n+1 个空指针。

下图给大家展示了图 1 中的二叉树在链表中的存储状态&

  • 40
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据结构和算法教程(C语言版)

创作不易,多多支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值