线索二叉树 ﹏ヽ暗。殇╰゛Y 2022-12-09 02:46 9阅读 0赞 ## 一 概述 ## 遍历二叉树是以一定的规则将二叉树中的结点排列成一个线性序列,从而得到几种遍历序列,使得该序列中的每个结点(第一个和最后一个结点除外)都有一个直接前驱和直接后继。 一般的二叉树链表存储仅能体现一种父子关系,不能直接得到结点在遍历中的前驱或后继。前面提到,在含有n个结点的二叉树中,有n+1个空指针。这是因为每个叶子结点有2个空指针,每个度为1的结点有1个空指针,度为2的结点不存在空指针。如果令度为2的结点树为n2,度为1的结点数为n1,度为0即叶子结点数位n0,则树的空指针总数为2n0+n1,同时存在度为2的结点数(n2)和叶子结点数(n0)的关系为n0=n2+1,所以空指针总数为n0+n1+n2+1 = n+1。 此时我们可以利用这些空指针来存放指向其前驱或后继的指针,使得我们可以像遍历单链表那样方便地遍历二叉树。而线索二叉树正是为了加快查找结点前驱和后继的速度。 ## 二 线索二叉树 ## ![20201130150004520.png][] 线索话过程为:如图如果一棵二叉树中,若无左子树,则将其左指针指向其前驱结点;若无右子树,则将右指针指向其后继结点。同时还需要增加两个标志域标识指针域是指向左(右)孩子还是指向前驱(后继)。 ![20200921164215584.png][] 其中,标志域的含义如下: <table> <tbody> <tr> <td colspan="1">ltag</td> <td>0</td> <td>lchild域指示结点的左孩子</td> </tr> <tr> <td>1</td> <td>lchild域指示结点的前驱结点</td> </tr> <tr> <td colspan="1">rtag</td> <td>0</td> <td>rchild域指示结点的右孩子</td> </tr> <tr> <td>1</td> <td>rchild域指示结点的后继结点</td> </tr> </tbody> </table> 线索二叉树的存储结构: typedef struct ThreadNode{ ElemType data; //数据元素 struct ThreadNode *lchild,*rchild; //左,右孩子指针 int ltag,rtag; //左,右线索标志 }ThreadNode,*ThreadTree; 以这种结点结构构成的二叉链表作为二叉树的存储结构,称为线索链表,其中指向结点前驱或后继的指针称为线索。加上线索化的二叉树称为线索二叉树。 [20201130150004520.png]: /images/20221123/e54e7269fcb142f98e937881ff4804ec.png [20200921164215584.png]: /images/20221123/98297006ce5f4205a49cd780e9323477.png
相关 树——二叉树——线索二叉树 一、线索二叉树 (1)什么是线索化 将二叉树以某种次序将其遍历, 得到线性序列, 就是将非线性结构进行线索化。 线索化的优点就是可以很快地得到前驱或后继。 如 梦里梦外;/ 2023年06月13日 09:35/ 0 赞/ 13 阅读
相关 线索二叉树 一 概述 遍历二叉树是以一定的规则将二叉树中的结点排列成一个线性序列,从而得到几种遍历序列,使得该序列中的每个结点(第一个和最后一个结点除外)都有一个直接前驱和直接后继。 ﹏ヽ暗。殇╰゛Y/ 2022年12月09日 02:46/ 0 赞/ 10 阅读
相关 线索二叉树 1.基本概念 对于某些二叉树而言,其指针域的空间不能被充分利用。因此我们可以考虑利用那些空的指针域来存放指向结点在某种遍历次序下的前驱和后继结点的地址。我们把这种指向前 怼烎@/ 2022年06月14日 03:48/ 0 赞/ 188 阅读
相关 线索二叉树 线索化二叉树相对于之前的树的遍历,在树的定义上增加了两个值,一个是ltag,另外一个是rtag。 ltag代表着这个节点的是否有右孩子,如果有,则ltag=1,p->lchi 以你之姓@/ 2022年06月09日 01:13/ 0 赞/ 216 阅读
相关 线索二叉树 二叉树的链式存储如下图, ![Image 1][] 不难发现,图中所示的左—右指针表示中,有一半以上的指针是空的。事实上,所有包括n个结点的二叉树的这种表示中,每个结 秒速五厘米/ 2022年05月29日 00:18/ 0 赞/ 183 阅读
相关 线索二叉树 线索二叉树提出的原因: 在普通二叉树中,每个结点都有左右两个指针域,这些指针域都指向结点类型的数据对象,当二叉树稀疏时,很多结点的左右两个指针域就显得浪费存储空间了。因此,提 待我称王封你为后i/ 2022年03月15日 13:24/ 0 赞/ 276 阅读
相关 线索二叉树 本文主要介绍线索二叉树和树、二叉树、森林三者之间的相互转换。 对于线索二叉树,这里只做简单介绍,着重还是要理解上篇博文中二叉树的各种遍历算法。 线索二叉树 基本概念 旧城等待,/ 2022年02月23日 08:36/ 0 赞/ 249 阅读
相关 线索二叉树 什么是线索二叉树? 遍历二叉树是以一定的规则将二叉树中的结点排列成一个线性序列,从而等到二叉树的各种遍历序列,其实质是对一个非线性操作进行线性化操作,使这个访问序列中的每 女爷i/ 2022年01月23日 08:15/ 0 赞/ 277 阅读
相关 线索二叉树 package com.tree; import java.util.concurrent.SynchronousQueue; / 红太狼/ 2021年10月15日 02:37/ 0 赞/ 327 阅读
相关 线索二叉树 Overview 将二叉树中没有子节点的节点称为空指针域,利用二叉树的空指针域,按照前中后某种遍历方式存放对应的前驱节点,后驱节点(这种附加指针称为“线索”)。二叉树的空 矫情吗;*/ 2021年10月01日 09:34/ 0 赞/ 372 阅读
还没有评论,来说两句吧...