线索二叉树怎么画_二叉树

3406fb64ea7f806526388f366d661487.png

基本概念

二叉树 是一种特殊的树,简单说每个结点 最多 有两个子树,且左右子树是有顺序的。

对于一棵具有

个结点的二叉树进行编号,如果编号为
的结点与同样深度的满二叉树中编号为
的结点在二叉树中的位置完全相同,那么这棵二叉树称为
完全二叉树

性质

  1. 在二叉树的第
    层上至多有
    个结点(
    )。 第一层只有 1 个结点; 第二层有
    个结点; 第三层有
    个结点; ...... 第
    层有
    个结点。
  2. 深度为
    的二叉树至多有
    个结点(
    )。 深度为
    的二叉树每一层最多结点数为
    , 令
    , 则有
  3. 对于任何一棵二叉树 T ,如果其终端结点数为
    ,度为 2的结点数为
    ,则
    。 对于满二叉树这一性质很好证明:
    。 对于普通二叉树该怎么理解呢? 假设在
    层存在度为1的结点,则终端结点减少
    个,减少的度为2的结点数为
    ,所以对于普通二叉树也满足该性质。
  4. 具有
    个结点的完全二叉树的深度为
    。 对于完全二叉树来说,其结点数存在关系
    。因为深度为整数,故有
    ,则
    ,则可证。
  5. 如果对于一棵有
    个结点的完全二叉树(其深度为
    )的结点按照层序编号(从第1层到第
    层,每层从左到右),对任一结点
    有:
    1. 如果
      ,则结点
      是二叉树的根,无双亲;如果
      ,则其双亲是结点
    2. 如果
      ,则结点
      无左孩子(结点
      为叶子结点);否则其左孩子是结点
    3. 如果
      ,则结点
      无右孩子;否则其右孩子是结点

aa40b47be010e3b41a9cfbf1a7764eac.png

存储结构

顺序存储结构

d1489534d730bfb00fa079faf4bda18d.png

由其结构特征可以得知:顺序结构多用于完全二叉树。

二叉链表

89b76cb3684f13e0ff02e4a3203af9d8.png

遍历方法

前序遍历

规则:根结点 -> 左结点 -> 右结点

96a8f63a9f081dd5cc13922bf1f17be2.png

中序遍历

规则:左结点 -> 根结点 -> 右结点

6351aef4f8b9914d47baf413468ba735.png

后序遍历

规则:左结点 -> 右结点 -> 根结点

e262e31166ad86c7d56c059f214cb101.png

层序遍历

0dd996b3806ae993c02558e3860238e4.png
这几种遍历方式都是将树中的结点转换为某种意义的线性序列,这会对程序的执行带来好处。

已知前序遍历序列和中序遍历序列,可以唯一确定一棵二叉树;

已知后序遍历序列和中序遍历序列,可以唯一确定一棵二叉树;

但是已知前序和后序遍历序列,是不可以唯一确定一棵二叉树的。

b3041873ec6acae4f00740426c4a39d7.png

线索二叉树

线索二叉树原理

36e3305491823c10cdd87b68b95da4c9.png

由图中可以发现该二叉树结构中存在很多空指针域。其中数目有多少呢? 假设二叉树中有

个结点,则指针域有
个。而
个结点则有
条分支线段,因此空指针域有
个。可见空指针域数量不少,如何利用呢?

先看上图二叉树结构中的问题有什么呢?在遍历的过程中不知道结点的前驱和后继是哪一个结点。所以我们可以利用那些空指针,存放指向结点在某种遍历次序下的前驱和后继结点的地址。我们把这种指向前驱或后继结点的指针称为 线索,加上线索的二叉链表称为 线索链表,相应的二叉树就称为 线索二叉树(Threaded Binary Tree)。

890d2097d3c0b6b1ff4816c9cbe673dd.png

上图为将二叉树中序遍历后,将所有空指针域中的rchild指向它的后继结点。

059621b53fd359a646be8a3dd1a53edb.png

上图中将空指针域中的lchild指向它的前驱结点。 结合上面两张图可以看出:线索二叉树将二叉树转换为双向链表。 二叉树以某种次序遍历使其变为线索二叉树的过程称为线索化

这时候还有问题没有解决,仅凭上面的结构无法判断一个结点rchild/lchild内存储的是后继节点/前驱结点还是右孩子/左孩子。所以这时候引入区分标志:

5cae7a3cf8c897db76d211b2ccf88b8b.png

所以,最终的结构为

136045815c49e2f8a5ef72a6fcdfae1a.png
  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值