数据结构_树_线索二叉树

github地址:
https://github.com/arkulo56/thought/blob/master/software/dataStruct/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84_%E6%A0%91_%E7%BA%BF%E7%B4%A2%E4%BA%8C%E5%8F%89%E6%A0%91.md

线索二叉树

产品分类是树型结构,如果要频繁的按照一定的次序访问产品分类(遍历)

  1. 有效的利用了二叉链表中的空指针
  2. 对二叉树以某种次序遍历使其变为线索二叉树的过程称为线索化
  3. 一棵有n个节点的二叉树,左右孩子用到的指针是n-1,留给线索的空指针是n+1

<img src="https://raw.githubusercontent.com/arkulo56/thought/master/images/datastruct/xiansuo_binaryTree.png" width="600" />

创建

按照中序遍历访问每一个节点,访问的过程中,用线索取代空指针。

  1. 若上次访问的节点的右指针为空,则将当前访问的节点地址填入,并置右标识位为1(后序)
  2. 若当前访问的节点的左指针为空,则将上次访问的节点地址填入,并置做标识位为1(前序)

注:从图2的H节点开始中序遍历,按照上述两条规则就可建立线索二叉树了

查询

访问前驱后继的方法是相同的,下面介绍后继,前驱反过来就行了

  1. 如果当前节点P的右标识位为0,则P->rchild为线索,指向P的后继
  2. 如果节点P的右标识位为1,则P的后继节点是右子树中序遍历的第一个节点。也就是沿着P的右孩子开始,按照左链(左孩子)往下查,直至找到一个没有左孩子的节点为止。

注:图3中A节点就是比较特殊的节点,他的前驱后继就得通过左右子树确定

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 树的概述 树是一种非常常用的数据结构,树与前面介绍的线性表,栈,队列等线性结构不同,树是一种非线性结构 1.树的定...
    Jack921阅读 4,501评论 1 31
  • 基于树实现的数据结构,具有两个核心特征: 逻辑结构:数据元素之间具有层次关系; 数据运算:操作方法具有Log级的平...
    yhthu阅读 4,332评论 1 5
  • 1 序 2016年6月25日夜,帝都,天下着大雨,拖着行李箱和同学在校门口照了最后一张合照,搬离寝室打车去了提前租...
    RichardJieChen阅读 5,173评论 0 12
  • 四、树与二叉树 1. 二叉树的顺序存储结构 二叉树的顺序存储就是用数组存储二叉树。二叉树的每个结点在顺序存储中都有...
    MinoyJet阅读 1,597评论 0 7
  • 首先是电影情节方面,讲的是男女主角互换身体(也有人说是梦中相遇,但我是这样理解的),一方救赎了另一方,并最终相爱。...
    Mr小唐阅读 328评论 0 0