问答题
已知一棵二叉树按顺序方式存储在数组A[1,n]中。设计算法,求出下标分别为i和j的两个结点的最近的公共祖先结点的值。【武汉大学2000年】
【正确答案】正确答案:二叉树顺序存储,是按完全二叉树的格式存储。算法的基本设计思想:利用完全二叉树双亲结点与子女结点编号间的关系,求下标为i和J的两结点的双亲、双亲的双亲等,直至找到最近的公共祖先。算法的代码: VOid AncestOr(ElemType A[],int n,int i,int J)( //二又树顺序存储在数组A[1..n]中 //本算法求下标分别为i和j的结点的最近公共祖先结点的值 while(i!=j) { if(i>j) i=i/2 ; //下标为i的结点的双亲结点的下标 e1Se J=j/2; //下标为j的结点的双亲结点的下标 } printf("所查结点的最近公共祖先的下标为%d,值为%d",i,A[i]), //设元素类型为整型 }//AnCeStor
【答案解析】