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

Posted 结点

篇首语:当筵意气临九霄,星离雨散不终朝。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 树 - 线索二叉树 (四)相关的知识,希望对你有一定的参考价值。

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

  在后序线索二叉树中 查找指定结点*p的后序前趋结点的具体规律是

  ① 若*p的左子树为空 则p >lchild是前趋线索 指示其后序前趋结点

  【例】在下图所示的后序线索二叉树中 H的后序前趋是B F的后序前趋是C

  

>

  ② 若*p的左子树非空 则p >lchild不是前趋线索 由于后序遍历时 根是在遍历其左右子树之后被访问的 故*p的后序前趋

  必是两子树中最后一个遍历结点

  当*p的右子树非空时 *p的右孩子必是其后序前趋

  【例】在上图所示的后序线索二叉树中 A的后序前趋是E;

  当*p无右子树时 *p的后序前趋必是其左孩子

  【例】在上图所示的后序线索二叉树中 E的后序前趋是F

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

  具体的规律

  ① 若*p是根 则*p是该二叉树后序遍历过程中最后一个访问到的结点 *p的后序后继为空

  ② 若*p是其双亲的右孩子 则*p的后序后继结点就是其双亲结点

  【例】上图所示的后序线索二叉树中 E的后序后继是A

  ③ 若*p是其双亲的左孩子 但*P无右兄弟 *p的后序后继结点是其双亲结点

  【例】上图所示的后序线索二叉树中 F的后序后继是E

  ④ 若*p是其双亲的左孩子 但*p有右兄弟 则*p的后序后继是其双亲的右子树中第一个后序遍历到的结点 它是该子树中 最

  左下的叶结点

  【例】上图所示的后序线索二叉树中 B的后序后继是双亲A的右子树中最左下的叶结点H

  注意

  F是孩子树中 最左下 结点 但它不是叶子

  由上述讨论中可知 在后序线索树中 仅从*p出发就能找到其后序前趋结点;要找*p的后序后继结点 仅当*p的右子树为空时

   才能直接由*p的右线索p >rchild得到 否则必须知道*p的双亲结点才能找到其后序后继 因此 如果线索二叉树中的结点没有指

  向其双亲结点的指针 就可能要从根开始进行后序遍历才能找到结点*P的后序后继 由此 线索对查找指定结点的后序后继并无多大

  帮助

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

  【参见练习】

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

  【参见参考书】

  在前序线索二叉树中 找某一点*p的前序后继也很简单 仅从*p出发就可以找到;但找其前序前趋也必须知道*p的双亲结点

  当树中结点未设双亲指针时 同样要进行从根开始的前序遍历才能找到结点*p的前序前趋

   遍历线索二叉树

  遍历某种次序的线索二叉树 只要从该次序下的开始结点开发 反复找到结点在该次序下的后继 直至终端结点

  遍历中序线索二叉树算法

  void TraverseInorderThrTree(BinThrTree p)

   //遍历中序线索二叉树

  if(p)//树非空

  while(p >ltag==Link)

  p=p >lchild; //从根往下找最左下结点 即中序序列的开始结点

  do

  printf( %c p >data); //访问结点

  p=InorderSuccessor(p); //找*p的中序后继

  while(p)

  //endif

  //TraverselnorderThrTree

  分析

  ① 中序序列的终端结点的右线索为空 所以do语句的终止条件是p==NULL

  ② 该算法的时间复杂性为O(n) 因为是非递归算法 常数因子上小于递归的遍历算法 因此 若对一棵二叉树要经常遍历 或

  查找结点在指定次序下的前趋和后继 则应采用线索链表作为存储结构为宜

  ③ 以上介绍的线索二叉树是一种全线索树(即左右线索均要建立) 许多应用中只要建立左右线索中的一种

  ④ 若在线索链表中增加一个头结点 令头结点的左指针指向根 右指针指向其遍历序列的开始或终端结点会更方便

cha138/Article/program/sjjg/201311/23874

相关参考

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

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

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

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

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

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

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

  .设一棵二叉树的先序中序遍历序列分别为  先序遍历序列ABDFCEGH 中序遍历序列BFDAGEHC  ()画出这棵二叉树  ()画出这棵二叉树的后序线索树  ()将这棵二叉树转换成对应

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

  .对下图所示二叉树分别按前序﹑中序﹑后序遍历给出相应的结点序列同时给二叉树加上中序线索【青岛海洋大学年一(分)】  假设一个二叉树的两种遍历如下  前序ABFGCHDEIJLK &nbs

知识大全 线索二叉树

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

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

  .已知一棵二叉树的中序(或中根)遍历结点排列为DGBAECHIF后序(或后根)遍历结点排列为GDBEIHFCA  ()试画出该二叉树  ()试画出该二叉树的中序穿线(或线索)树  ()试画出该二叉

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

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

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

  已知一棵二叉树的前序遍历为ABECDFGHIJ中序遍历为EBCDAFHIGJ试画出这棵树和它的中序线索树假定用于通讯的电文仅有个字母CC…C组成各个字母在电文中出现的频率分别为试为这个字母设计哈夫

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

  第六章树和二叉树  四应用题  .从概念上讲树森林和二叉树是三种不同的数据结构将树森林转化为二叉树的基本目的是什么并指出树和二叉树的主要区别【西安电子科技大学软件二(分)】  .树和二叉树之间有什