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

Posted 结点

篇首语:一身转战三千里,一剑曾百万师。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 树 - 线索二叉树 (三)相关的知识,希望对你有一定的参考价值。

  线索二叉树的运算

   查找某结点*p在指定次序下的前趋和后继结点

  ( )在中序线索二叉树中 查找结点*p的中序后继结点

  在中序线索二叉树中 查找结点*p的中序后继结点分两种情形

  ① 若*p的右子树空(即p >rtag为Thread) 则p >rchild为右线索 直接指向*p的中序后继 【例】下图的中序线索二叉树中

   结点D的中序后继是A

  

>

  ② 若*p的右子树非空(即p >rtag为Link) 则*p的中序后继必是其右子树中第一个中序遍历到的结点 也就是从*p的右孩子

  开始 沿该孩子的左链往下查找 直至找到一个没有左孩子的结点为止 该结点是*p的右子树中 最左下 的结点 即*P的中序后继结

  点

  【例】上图的中序线索二叉树中

  A的中序后继是F 它有右孩子;

  F的中序后继是H 它无右孩子;

  B的中序后继是D 它是B的右孩子

  在中序线索二叉树中求中序后继结点的过程可 具体算法如下

  BinThrNode *InorderSuccessor(BinThrNode *p)

  //在中序线索树中找结点*p的中序后继 设p非空

  BinThrNode *q;

  if (p >rtag==Thread) //*p的右子树为空

  Return p >rchild; //返回右线索所指的中序后继

  else

  q=p >rchild; //从*p的右孩子开始查找

  while (q >ltag==Link)

  q=q >lchild; //左子树非空时 沿左链往下查找

  return q; //当q的左子树为空时 它就是最左下结点

   //end if

  

  该算法的时间复杂度不超过树的高度h 即O(h)

  ( )在中序线索二叉树中查找结点*p的中序前趋结点

  中序是一种对称序 故在中序线索二叉树中查找结点*p的中序前趋结点与找中序后继结点的方法完全对称 具体情形如下

  ① 若*p的左子树为空 则p > child为左线索 直接指向*p的中序前趋结点;

  【例】上图所示的中序线索二叉树中 F结点的中序前趋结点是A

  ② 若*p的左子树非空 则从*p的左孩子出发 沿右指针链往下查找 直到找到一个没有右孩子的结点为止 该结点是*p的左

  子树中 最右下 的结点 它是*p的左子树中最后一个中序遍历到的结点 即*p的中序前趋结点

  【例】上图所示中序线索二叉树中 结点E左子树非空 其中序前趋结点是I

  在中序线索二叉树中求中序前趋结点的过程可 具体算法如下

  BinThrNode *Inorderpre(BinThrNode *p)

  //在中序线索树中找结点*p的中序前趋 设p非空

  BinThrNode *q;

  if (p >ltag==Thread) //*p的左子树为空

  return p >lchild; //返回左线索所指的中序前趋

  else

  q=p >lchild; //从*p的左孩子开始查找

  while (q >rtag==Link)

  q=q >rchild; //右子树非空时 沿右链往下查找

  return q; //当q的右子树为空时 它就是最右下结点

   //end if

  

  由上述讨论可知 对于非线索二叉树 仅从*p出发无法找到其中序前趋(或中序后继) 而必须从根结点开始中序遍历 才能找到

  *p的中序前趋(或中序后继) 线索二叉树中的线索使得查找中序前趋和中序后继变得简单有效

cha138/Article/program/sjjg/201311/23876

相关参考

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

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

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

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

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

  给出中序线索树的结点结构并画出一个具有头结点的中序线索树使其树结点至少应有个写一算法在不使用栈和递归的情况下前序遍历一中序线索树并分析其时间复杂性【东南大学三(分)三(分)六(分)】  .设有二叉

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

  .下面的算法在中序线索树中找由指针所指结点的后继并由指针指向该后继结点试补充完整(线索树的结点有五个域datalchildrchild左右标志域ltagrtag并规定标志指向孩子指向线索  PRO

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

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

知识大全 线索二叉树

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

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

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

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

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

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

   (四)树与二叉树的应用    二叉排序树    定义  二叉排序树(也称二叉查找树)或者是一棵空的二叉树或者是具有下列性质的二叉树    ()若它的左子树不空则左子

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

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