知识大全 数据结构考研分类复习真题 第六章 答案 (五)[42]

Posted 结点

篇首语:弓背霞明剑照霜,秋风走马出咸阳。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 数据结构考研分类复习真题 第六章 答案 (五)[42]相关的知识,希望对你有一定的参考价值。

   [题目分析]求中序全线索树任意结点p的前序后继 其规则如下 若p有左子女 则左子女就是其前序后继 若p无左子女而有右子女 则p的右子女就是p的前序后继 若p无左右子女 这时沿p的右线索往上 直到p的右标志为 (非线索) 这时若p的右子女为空 则表示这是中序遍历最后一个结点 故指定结点无前序后继 否则 该结点就是指定结点的前序后继 程序段如下

  if(p >ltag== && p >lchild!=null) return(p >lchild); //p的左子女是p的前序后继  else if(p >rtag== ) && p >rchild!=null) return(p >rchild);//p右子女是其前序后继  else   //p无左右子女 应沿右线索向上(找其前序后继) 直到某结点右标记为   while (p >rtag== ) p=p >rchild;  if (p >rchild) return(p >rchild);else return(null); //指定结点的前序后继

  [算法讨论]请注意题目 中序序列第一结点的左标志和最后结点的右标志皆为0(非线索) 对应指针皆为空 的说明 若无这一说明 只要结点的左标记为 其左子女就是其前序后继 最后 当p无子女 沿右线索向上找其前序后继时 若最后结点的右标志为0 但对应指针为空 p也无前序后继

   [题目分析] 不借助辅助堆栈实现中序遍历 必须解决如何查找后继的问题 使用线索树就行 为此 将结点结构修改为(ltag lchild data rchild rtag) 各字段的含义在上面已多次使用 不再介绍 设二叉树已中序线索化 下面首先编写一查中序后继的函数 接着是中序遍历的非递归算法

  BiTree  After(BiThrTree t)  //查中序线索二叉树上结点t的后继  if (t >rtag== ) return(t >rchild);  p=t >rchild;  while(p >ltag== ) p=p >lchild; //p右子树中最左下的结点是p的中序后继  return(p); //if  void InOrder(BiThrTree bt)  //非递归中序遍历带头结点的中序线索二叉树bt  p=bt >lchild; //p指向原二叉树的根结点  if (p!=bt) //二叉树非空  while (p >ltag== ) p=p >lchild; //找中序遍历的第一个结点  while (p!=bt)  //没回到头结点 就一直找后继并遍历  visit(*p); p=After(p);   //if  结束算法InOrder

cha138/Article/program/sjjg/201311/23698

相关参考

知识大全 数据结构考研分类复习真题 第六章 答案 (五)[23]

  PROCprint(bt:BiTreexy:integer)  //将二叉树逆时针旋转度打印xy是根结点基准坐标调用时xy=  IFbt<>NILTHEN[print(bt↑rchil

知识大全 数据结构考研分类复习真题 第六章 答案 (五)[19]

  intLevel(BiTreebt)//层次遍历二叉树并统计度为的结点的个数  intnum=;//num统计度为的结点的个数  if(bt)QueueInit(Q);QueueIn(Qbt)//

知识大全 数据结构考研分类复习真题 第六章 答案 (五)[47]

  .BiThrTreeInSucc(BiThrTreeTp) //在对称序穿线树T中查找给定结点p的中序后继  if(p>rtag==)q=p>rchild; &nb

知识大全 数据结构考研分类复习真题 第六章 答案 (五)[33]

  intBTLC(BiTreeTint*c)//对二叉树T的结点计数  if(T)  *c++;  BTLC(T>lchild&c);//统计左子树结点  BTLC(T>rchi

知识大全 数据结构考研分类复习真题 第六章 答案 (五)[45]

  voidInOrderThreat(BiThrTreethrt)  //thrt是指向中序全线索化头结点的指针本算法中序遍历该二叉树  p=thrt>lchild; //p指向二叉

知识大全 数据结构考研分类复习真题 第六章 答案 (五)[34]

  .intCount(BiTree bt)//非递归遍历求二叉树上的叶子结点个数  intnum=;  BiTrees[];//s是栈栈中元素是二叉树结点指针栈容量足够大  whlie(b

知识大全 数据结构考研分类复习真题 第六章 答案 (五)[25]

  [题目分析]知二叉树中序序列与后序序列第题以递归算法建立了二叉树本题是非递归算法  voidInPostCreat(ElemTypeIN[]POST[]intlhlh)  //由二叉树的中序序列I

知识大全 数据结构考研分类复习真题 第六章 答案 (五)[15]

  [题目分析]先序遍历二叉树的非递归算法要求进栈元素少意味着空指针不进栈  voidPreOrder(Bitree bt)//对二叉数bt进行非递归遍历  inttop=;Bitrees[

知识大全 数据结构考研分类复习真题 第六章 答案 (五)[6]

  .BiTreeCreat(ElemTypeA[]inti)  //n个结点的完全二叉树存于一维数组A中本算法据此建立以二叉链表表示的完全二叉树  BiTreetree;  if(i<=n)t

知识大全 数据结构考研分类复习真题 第六章 答案 (五)[4]

  .[题目分析]当森林(树)以孩子兄弟表示法存储时若结点没有孩子(fch=null)则它必是叶子总的叶子结点个数是孩子子树(fch)上的叶子数和兄弟(nsib)子树上叶结点个数之和  typedef