知识大全 线索二叉树

Posted 结点

篇首语:笛里谁知壮士心,沙头空照征人骨。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 线索二叉树相关的知识,希望对你有一定的参考价值。

线索二叉树概念

.定义  n个结点的二叉链表中含有n+ 个空指针域 利用二叉链表中的空指针域 存放指向结点在某种遍历次序下的前趋和后继结点的指针(这种附加的指针称为 线索 )   这种加上了线索的二叉链表称为线索链表 相应的二叉树称为线索二叉树(Threaded   BinaryTree) 根据线索性质的不同 线索二叉树可分为前序线索二叉树 中序线索二叉树和后序线索二叉树三种  注意   线索链表解决了二叉链表找左 右孩子困难的问题 出现了无法直接找到该结点在某种遍历序列中的前趋和后继结点的问题

.线索链表的结点结构  线索链表中的结点结构为

  其中:  ltag和rtag是增加的两个标志域 用来区分结点的左 右指针域是指向其左 右孩子的指针 还是指向其前趋或后继的线索

.线索二叉树的表示 【例】下面(a)图所示的中序线索二叉树 其线索链表如下面(b)图所示

        注意   图中的实线表示指针 虚线表示线索   结点C的左线索为空 表示C是中序序列的开始结点 无前趋   结点E的右线索为空 表示E是中序序列的终端结点 无后继   线索二叉树中 一个结点是叶结点的充要条件为 左 右标志均是

二叉树的线索化  .线索化和线索化实质  将二叉树变为线索二叉树的过程称为线索化   按某种次序将二叉树线索化的实质是 按该次序遍历二叉树 在遍历过程中用线索取代空指针   具体过程可【参见动画演示】

.二叉树的中序线索化( )分析  算法与中序遍历算法类似 只需要将遍历算法中访问结点的操作具体化为建立正在访问的结点与其非空中序前趋结点间线索   该算法应附设一个指针pre始终指向刚刚访问过的结点(pre的初值应为NULL) 而指针p指示当前正在访问的结点 结点*pre是结点*p的前趋 而*p是*pre的后继

( )将二叉树按中序线索化的算法  typedef enum Link Thread PointerTag //枚举值Link和Thread分别为   typedef struct node      DataType data       PointerTag ltag rtag //左右标志      Struct node *lchild *rchild     BinThrNode \\\\线索二叉树的结点类型  typedef BinThrNode *BinThrTree   BinThrNode *pre=NULL //全局量  void lnorderThreading(BinThrTree p)    //将二叉树p中序线索化      if(p) //p非空时 当前访问结点是*p             InorderThreading(p >lchild) //左子树线索化                 //以下直至右子树线索化之前相当于遍历算法中访问结点的操作             p >ltag=(p >lchild)?Link Thread //左指针非空时左标志为Link                                             //(即 ) 否则为Thread(即 )             p >rtag=(p >rchild)?Link Thread              *(pre) //若*p的前趋*pre存在                   if(pre >rtag==Thread) //若*p的前趋右标志为线索                        pre >rchild=p //令*pre的右线索指向中序后继                  if(p >ltag==Thread) //*p的左标志为线索                       p >lchild=pre //令*p的左线索指向中序前趋                 // 完成处理*pre的线索             pre=p //令pre是下一访问结点的中序前趋             InorderThreeding(p >rehild) //右子树线索化           //endif    //InorderThreading

( )算法分析  和中序遍历算法一样 递归过程中对每结点仅做一次访问 因此对于n个结点的二叉树 算法的时间复杂度亦为O(n)

cha138/Article/program/sjjg/201311/22726

相关参考

知识大全 树 - 线索二叉树 (三)

  线索二叉树的运算  查找某结点*p在指定次序下的前趋和后继结点  ()在中序线索二叉树中查找结点*p的中序后继结点  在中序线索二叉树中查找结点*p的中序后继结点分两种情形  ①若*p的右子树空(

知识大全 线索二叉树的运算

线索二叉树的运算.查找某结点*p在指定次序下的前趋和后继结点()在中序线索二叉树中查找结点*p的中序后继结点  在中序线索二叉树中查找结点*p的中序后继结点分两种情形  ①若*p的右子树空(即p>

知识大全 树 - 线索二叉树 (一)

  线索二叉树概念  定义  n个结点的二叉链表中含有n+个空指针域利用二叉链表中的空指针域存放指向结点在某种遍历次序下的前趋和后继结点的指  针(这种附加的指针称为线索)  这种加上了线索的二叉链表

知识大全 树 - 线索二叉树 (四)

  ()在后序线索二叉树中查找指定结点*p的后序前趋结点  在后序线索二叉树中查找指定结点*p的后序前趋结点的具体规律是  ①若*p的左子树为空则p>lchild是前趋线索指示其后序前趋结点  

知识大全 数据结构之线索二叉树

基本概念  用五个标志域来存储结点的结构   以这种结点结构构成的二叉链表作为二叉树的存储结构叫做线索链表(ThreadedLinkedLists)  线索指向结点前驱和后继的指针  线索二

知识大全 数据结构考研分类复习真题 第六章 树和二叉树 (二)[6]

  在中序线索二叉树中每一非空的线索均指向其祖先结点【合肥工业大学二(分)】  线索二叉树的优点是便于是在中序下查找前驱结点和后继结点【上海海运学院 一(分)】  二叉树中序线索化后不存在空

知识大全 第三部分 树与二叉树[5]

   线索二叉树    //二叉树的二叉线索存储表示  typedefenumPointerTaglinkThread;  typedefStrucBithrNode  

知识大全 数据结构考研分类复习真题 第六章 树和二叉树 (二)[3]

  .任何二叉树的后序线索树进行后序遍历时都必须用栈【西安交通大学二(分)】  .任何一棵二叉树都可以不用栈实现前序线索树的前序遍历【西安交通大学二(分)】  .由一棵二叉树的前序序列和后序序列可以唯

知识大全 数据结构考研分类复习真题 第六章 树和二叉树 (三)[7]

  .设y指向二叉线索树的一叶子x指向一待插入结点现x作为y的左孩子插入树中标志域为ltag和rtag并规定标志为是线索则下面的一段算法将x插入并修改相应的线索试补充完整(lchildrchild分别

知识大全 数据结构考研分类复习真题 第六章 树和二叉树 (四)[22]

  .请说明是否存在这样的二叉树即它可以实现后序线索树进行后序遍历时不使用栈而对前序线索树进行前序遍历时又有什么样的二叉树可不使用栈【西安电子科技大学二(分)】  .一棵左右子树均不空的二叉树在先序线