线索化二叉树的实现(思路分析) [数据结构与算法]
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是指向子树(或者子节点)还是指向了前驱(或者后继)结点

补充:

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

补充二:

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

相关内容

热门资讯

摩通:华尔街银行业绩强劲提振欧... 观点网讯:7月22日,华尔街大型银行第二季度业绩表现强劲,提振了市场对欧洲投资银行即将开启的财报季的...
广州拟推动房地产纾困和发展 引... 观点网讯:7月22日,“十五五”时期,广州拟切实推动房地产纾困和发展,引导房地产市场企业转型升级。 ...
AI投入成“无底洞”?谷歌资本... 隔夜美股三大指数集体收低,道琼斯工业指数下跌0.01%报52218.58点,标普500指数跌0.14...
新太空经济从“起势”迈向“成势... 当前,全球正处于新一轮科技革命和产业变革加速演进的关键节点,人工智能、合成生物学、固态电池、高端算力...
金价四连涨,水贝又挤满人 每经记者:赵景致 每经编辑:何小桃,廖丹 记者|赵景致 编辑|何小桃 廖丹杜恒峰校对|金冥羽 金价在...
专访微亿智造董事长张志琦:在“... 本报(chinatimes.net.cn)记者石飞月 上海报道 在刚刚过去的2026世界人工智能大会...
Alphabet CEO:市场... 美东时间周三(7月22日)盘后,在Alphabet财报电话会上,公司CEO Sundar Picha...
毕马威:香港基金税制改革料吸引... 观点网讯:7月22日,毕马威发布《香港资产管理及私募股权展望》报告,指出香港基金免税制度及附带权益税...
维护资本市场平稳运行,组合拳来... 重要新闻提示 7月20日,证监会召开证券公司及基金机构座谈会,听取各方关于促进资本市场平稳健康发展的...
原创 缩... 其实这个阶段,反攻继不继续,对我来说没啥意义。因为小登估值依旧高高在上,随时可能像上周五,带崩老登。...
易方达张坤,罕见调仓 图/视觉中国 昔日公募圈“一哥”,也不“爱”白酒了。 7月21日,易方达知名基金经理张坤旗下多只产品...
宽基ETF连续2日净流出 7月23日,本周二、周三,宽基ETF连续2日资金流出。 数据显示,7月22日,ETF市场净流出216...
367 款新品换不来年轻人一句... 作者|极点商业 张先森 2026年初夏,#康师傅冰红茶卖不动了#登上热搜。 网友对此的反应颇为两极...
1元净资产市场只给5毛8!银行... 继中信银行、招商银行之后,光大银行也于7月20日在投资者互动平台透露,该行已成立市值管理小组,全面统...
风险等级为何需要运作机制更关键... 在基金投资领域,风险等级是投资者评估基金产品的重要参考指标之一。然而,很多投资者往往只关注风险等级的...
刚刚!万亿“光模块一哥”正式招... (来源:上市之家) 7月22日,中际旭创股份有限公司(300308.SZ)正式刊发H股招股章程,启动...
智象未来完成15亿元C轮融资,... 智象未来(合肥)信息技术有限公司(以下简称“智象未来”)是一家全球多模态生成式人工智能创新企业,也是...
半年赚170%、规模565亿,... 来源:市场资讯 来源:资管网 半年赚170%,管理规模从89亿干到565亿。 然后他减仓了。 财通基...
Token账单背后的资本博弈 最近大家可能有一个困惑:为什么大模型概念股,看似业务高速增长、调用量节节攀升,但估值在经历了高速攀升...
Costco签约入驻 京东成为... 观点网讯:7月22日,全球知名会员制仓储零售商Costco(开市客)与京东达成合作,京东成为Cost...