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

相关参考