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

Posted 结点

篇首语:少年乘勇气,百战过乌孙。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 数据结构考研分类复习真题 第六章 答案 (五)[43]相关的知识,希望对你有一定的参考价值。

   [题目分析]在中序穿线树中找结点的双亲 最简单情况是顺线索就可找到 例如 结点的左子女的右线索和右子女的左线索都指向双亲 但对于有左右子女的结点来说 则要利用中序穿线树中线索 向上 指向祖先的特点 若结点p是结点q右子树中中序遍历最左下的结点 p的左线索指向q 若结点p是结点q左子树上中序遍历最右下的结点 p的右线索指向是q 反过来 通过祖先找子女就容易了 另外 若结点q的后继是中序穿线树的头结点 则应特殊考虑

  void FFA(BiThrTree t p q)//在中序穿线树t上 求结点p的双亲结点q  q=p;  //暂存  while(q >RTAG== ) q=q >RLINK; //找p的中序最右下的结点  q=q >RLINK;          //顺右线索找到q的后继(p的祖先结点)  if (q==t) q=t >LLINK; //若后继是头结点 则转到根结点  if (q==p) printf( 根结点无双亲\\n ) return;   if (q >LLINK==p) return(q); else q=q >LLINK; //准备到左子树中找p  while (q >RLINK!=p) q=q >RLINK return(q); //找最右结点的过程中回找到p  //结束FFA

  [算法讨论]本题也可以先求结点p最左下结点的前驱线索 请读者自己写出算法

   [题目分析]带头结点的中序线索树 其头结点的lchild指向二叉树的根结点 头结点的rchild域指向中序遍历的最后一个结点 而二叉树按中序遍历的第一个结点的lchild和最后一个结点的rchild指向头结点 故从头结点找到根结点后 顺 后继 访问二叉树 在中序线索树中 找前序的后继 已在第 题进行了详细的讨论 这里不再赘述 中序线索树在上面的 四 应用题 已画过多个 这里也不重复

  void PreorderInThreat(BiTrhTree tbt)  //前序遍历一中序全线索二叉树tbt tbt是头结点指针  bt=tbt >lchild;  while(bt)  while(bt >ltag== )printf(bt >data); bt=bt >lchild;//沿左分枝向下  printf(bt >data);   //遍历其左标志为 的结点 准备右转  while(bt >rtag== && bt >rchild!=tbt) bt=bt >rchild;//沿右链向上  if (bt >rchild!=tbt) bt=bt >rchild;//沿右分枝向下    //结束PreorderInThreat

  时间复杂度O(n)

cha138/Article/program/sjjg/201311/23699

相关参考

知识大全 数据结构考研分类复习真题 第六章 答案 (五)[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