线索化二叉树的实现(思路分析) [数据结构与算法]
admin
2024-04-03 05:18:20
0

线索化二叉树的实现(思路分析)

线索二叉树: Threaded BinaryTree

我们先来看一个问题:(通过这个问题我们来引入我们将要进行讲解的线索化二叉树):

问题: 将数列{1,3,6,8,10,14}构成一颗二叉树(如下图)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FDAl4vk0-1667387750530)(E:\非凡英才\数据结构(java)]\数据结构图解\线索化二叉树(问题引入).png)

问题分析:

  1. 当我们对上面的二叉树进行中序遍历的时候,数列为{8,3,10,1,6,14}
  2. 但是6,8,10,14这几个结点的左右指针并没有完全的利用上(这四个结点都有指针是空缺的,也就是这几个结点都有左右指针指向null的情况)
  3. 如果我们希望充分的利用各个节点的左右指针,让各个节点可以指向自己前后的结点,这个时候要如何做? --> 这个时候就要使用到我们的线索化二叉树

线索化二叉树的基本介绍:

  1. n个结点的二叉链表(二叉树)中有n+1个空指针域,利用二叉链表中的空指针域存放指向结点在某种遍历次序之下的前序和后继结点的指针(这种附加的指针就称之为: 线索)
    • 为什么n个结点的二叉树中就会有n+1个空指针域?
    • 公式2n - (n - 1) :
      • 那么公式中的2n是什么? —> 这里公式中的2n就是我们这里n个结点的二叉树中总共有多少个指针域,每个结点都有两个指针域,所以一共有n个结点那么自然就是一共有2n个指针域
      • 那么公式中的n-1又是什么? --> 这里公式中的n- 1其实就是含有n个结点的二叉树中被使用的指针域的个数, 我们每两个结点之间就需要使用某个结点的某一个指针域进行一个连接, 这个时候有n个结点,那么自然就是需要n- 1个指针域进行连接了
      • 所以最终这个公式的含义其实就是: 总指针域个数 - 已经使用的指针域的个数 =空指针域的个数
  2. 这种加了线索的二叉链表称之为: 线索链表,相应的二叉树称之为线索二叉树(Threaded BinaryTree),根据线索的性质的不同线索二叉树可以分为: 前序线索二叉树 , 中序线索二叉树, 后序线索二叉树
  3. 一个节点的前一个节点我们就称之为当前节点的前驱结点
    • 但是要注意 : 这里的前驱结点和后继结点都是相对于在某种遍历次序之下而说的, 不同的遍历方式之下的结点的相对位置不同
  4. 一个节点的后一个节点我们就称之为当前节点的后继结点

这里我们给出一个中序线索化二叉树的实例图解:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wQ5vTdiI-1667387750531)(E:\非凡英才\数据结构(java)]\数据结构图解\二叉树中序线索化实例.png)

思路分析:

我们以中序线索化二叉树为例

  1. 首先我们要知道我们要完成当前节点连接到对应的前驱和后继,这个时候我们肯定是要使用两个指针来完成( 这里我们使用一个node和一个pre)

    • 我们使用node开始的时候指向我们的第一个遍历到的结点,让pre开始的时候指向null
  2. 我们先向左遍历二叉树

  3. 如果node此时的左指针为null,此时就将node的左指针指向前驱pre, 如果pre右指针为null,此时就将pre指向的结点的右指针指向后继node

    • 这里由一个难点: 由于我们只是使用了两个指针来连接我们的当前节点, 前驱 , 后继,这个时候如果是连接前驱和当前节点的时候我们的pre就是指向前驱节点的, node是指向当前节点的, 但是如果是连接当前节点和后继的时候我们的pre就是指向当前节点的 ,node是指向后继结点的
      • 也就时使用两个指针要完成两个位置的连接要通过两次连接才可以,两个指针一次只可以连接了两个位置,但是我们这个时候是三个位置的连接,需要两次连接
  4. 向右递归右子树

当线索化二叉树之后,二叉树结点属性left 和 right就有了两种状态:

  1. left

    ①指向的是左子树或者左子节点

    ②指向的是前驱结点

  2. right

    ①指向的是右子树或者右子节点

    ②指向的是后继结点

所以我们要给结点类设置两个属性: leftType和rightType,用这两个属性标记我们的结点的left和rihgt是指向子树(或者子节点)还是指向了前驱(或者后继)结点

补充:

(以中序为例:)其实我们可以发现: 中序线索化二叉树也罢,中序查找也罢,或者是中序的什么操作也罢,都是在中序遍历的基础上进行一些二外的操作, 所以我们掌握了遍历的操作只会我们就掌握了对应的很多操作的写法

补充二:

(以中序为例: )其实中序线索化二叉树就是将对应的有空指针域的节点的左空指针域指向当前节点中序遍历下的前驱结点, 将对应的有空指针域的结点的右空指针域指向此节点中序遍历下的后继结点

相关内容

热门资讯

亚朵节后价格“跳水”超70% 春节过后,部分热门小城的亚朵酒店房价上演“过山车”行情,房价节前飙升,节后迅速跳水,巨大的价格波动引...
原创 金... 你绝对想不到,同样一克999足金,在深圳水贝批发市场只要1334元,走进周大福门店却变成1545元,...
德兰明海冲击港交所!递表前大手... 又一家储能企业“叩响”了港交所大门。近期,港交所官网显示,中小型用户侧储能企业深圳市德兰明海新能源股...
绿茶集团、猫眼娱乐发布正面盈利... |2026年2月25日 星期三| NO.1绿茶集团发布正面盈利预告 2月24日港股收市后,绿茶集团(...
安宁市的历史文化及名人有哪些 安宁市,这座坐落在彩云之南的城市,宛如一颗璀璨明珠,散发着迷人的历史文化魅力。在这里,岁月留下了深深...
中国央行连续12个月加量续作M... 来源:中国新闻网 中新社北京2月24日电 (陶思阅)中国央行24日发布中期借贷便利(MLF)招标公告...
不是15%?特朗普10%全球关... 据美国海关及边境保卫局(CBP)发布消息,特朗普政府将实施的新全球关税为10%。 第一财经收到的CB...
2026年春节出游人次、消费金... 2026年春节,为期9天的超长假期点燃了全国消费热情,多项核心数据创下历史纪录。 经文化和旅游部数据...
美国联邦存款保险公司(FDIC... 美国联邦存款保险公司(FDIC):美国银行业存款季环比下滑2%。
2026春节AI大战深度复盘:... 主编温静导读:2026年春节,元宝、千问、豆包三大巨头以红包、免单为杠杆,发动了一场规模空前的用户争...
期市节后首日金属板块普涨 白银... 本报记者 王宁 2月24日,春节后的首个交易日,国内期货市场呈现涨多跌少态势。 从板块表现来看,农产...
月跌超10%背后:软件行业,将... 此前一天,2月23日,人工智能公司Anthropic宣布,其Claude Code工具可用于在IBM...
公告精选 |《飞驰人生3》票房... 控制权收购 东阳光(600673.SH):公司正在筹划通过发行股份的方式收购宜昌东数一号投资有限责任...
东阳光:筹划收购东数一号控制权... 上证报中国证券网讯(记者 骆民)东阳光公告,公司正在筹划通过发行股份的方式收购宜昌东数一号投资有限责...
原创 高... 你有没有发现,几年前人人都在拼命买房,而现在,越来越多人开始思考,房子,到底还是不是财富? 这几年,...
这个春节,中国经济热力值拉满 2026年的春节,注定要在中国消费市场上留下浓墨重彩的一笔。 当9天的超长假期遇上持续加码的政策红利...
2026年中国汽车产业十大趋势... 2025年,中国汽车产业在连续17年产销量稳居全球第一的基础上,再次交出了一份充满变革与挑战的答卷。...
2022年天猫烘焙厨电行业趋势... 今天分享的是:2022年天猫烘焙厨电行业趋势白皮书 报告共计:7页 烘焙厨电迎来新变革:从“功能单一...