二叉树之线索二叉树

二叉树的遍历运算是将二叉树中结点按一定规律线性化的过程。
当以二叉链表作为存储结构时,只能找到结点的左、右孩子信息,而不能直接得到结点在遍历序列(前、中、后序)中的前驱和后继信息。
要得到这些信息可采用以下两种方法:
第一种方法是将二叉树遍历一遍,在遍历过程中便可得到结点的前驱和后继,但这种方法浪费时间。
第二种方法是充分利用二叉链表中的空链域,将遍历过程中结点的前后继信息保存下来。

下面重点讨论第二种方法。
我们知道,在有n个结点的二叉链表中共有2n个链域,但只有n-1个有用的非空链域,其余n+1个链域是空的。可以利用剩下的n+1个空链域来存放遍历过程中结点的前驱和后继信息。
现作如下规定:
若结点有左子树,则其Left域指向其左孩子,否则Left域指向其前驱;
若结点有右子树,则其Right域指向其右孩子,否则Right域指向其后继;

为了区分孩子结点和前驱、后继结点,为结点结构增设两个标志域:Lflag、Rflag。
在这种结构中,指向前驱和后继结点的指针叫做线索。以这种结构组成的二叉链表作为二叉树的存储结构,叫做线索链表。对二叉树以某种次序(前、中、后序)进行遍历并且加上线索的过程叫做线索化。线索化了的二叉树称为线索二叉树

线索化实质上是将二叉链表中的空指针域填上相应结点的遍历前驱或后继结点的地址,而前驱和后继的地址只能在遍历的过程中才能得到。因此线索化的过程即为在遍历过程中修改空指针域的过程。对二叉树按照不同的遍历次序(前、中、后序)进行线索化,可以得到不同的线索二叉树,这其中包括先序线索二叉树中序线索二叉树后序线索二叉树。如下图所示。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值