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

Posted 结点

篇首语:登山则情满于山,观海则意溢于海。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 数据结构考研分类复习真题 第六章 答案 (五)[13]相关的知识,希望对你有一定的参考价值。

   [题目分析]二叉树顺序存储 是按完全二叉树的格式存储 利用完全二叉树双亲结点与子女结点编号间的关系 求下标为i和j的两结点的双亲 双亲的双亲 等等 直至找到最近的公共祖先

  void Ancestor(ElemType A[] int n i j)  //二叉树顺序存储在数组A[ n]中 本算法求下标分别为i和j的结点的最近公共祖先结点的值   while(i!=j)  if(i>j) i=i/ ;      //下标为i的结点的双亲结点的下标  else j=j/ ;         //下标为j的结点的双亲结点的下标  printf( 所查结点的最近公共祖先的下标是%d 值是%d i A[i]);//设元素类型整型   // Ancestor

   [题目分析]用二叉树表示出父子 夫妻和兄弟三种关系 可以用根结点表示父(祖先) 根结点的左子女表示妻 妻的右子女表示子 这种二叉树可以看成类似树的孩子兄弟链表表示法 根结点是父 根无右子女 左子女表示妻 妻的右子女(右子女的右子女等)均可看成兄弟(即父的所有儿子) 兄弟结点又成为新的父 其左子女是兄弟(父的儿子)妻 妻的右子女(右子女的右子女等)又为儿子的儿子等等 首先递归查找某父亲结点 若查找成功 则其左子女是妻 妻的右子女及右子女的右子女等均为父亲的儿子

  BiTree Search(BiTree t ElemType father)//在二叉树上查找值为father的结点  if(t==null) return (null);            //二叉树上无father结点  else if(t >data==father) return(t);   //查找成功  p=Search(t >lchild father); p=Search(t >rchild father);   //结束Search  void PrintSons(BiTree t ElemType p)  //在二叉树上查找结点值为p的所有的儿子  p=Serach(t p);                     //在二叉树t上查找父结点p  if(p!=null)                        //存在父结点  q=p >lchild; q=q >rchild;       //先指向其妻结点 再找到第一个儿子  while(q!=null) printf(q >data); q=q >rchild; //输出父的所有儿子    //结束PrintSons

cha138/Article/program/sjjg/201311/23729

相关参考