题目
设顺序存储的二叉树中有编号为i和j的两个结点,请设计算法求出它们最近的公共祖先结点的编号和值。
代码
#include<stdio.h>
#include<stdlib.h>
#define N 1001
int findConAncestor(int x,int y);
int data[N];
int n;
void main(){
int i,x,y,k;
scanf("%d",&n);
for(i=0;i<=n;i++)//置空
data[i]=0;
for(i=1;i<=n;i++)
scanf("%d",&data[i]);
scanf("%d %d",&x,&y);
k=findConAncestor(x,y);
if(k==-1)
printf("ERROR: T[%d] is NULL\n",x);
else if(k==-2)
printf("ERROR: T[%d] is NULL\n",y);
else if(k>0)
printf("%d %d\n",k,data[k]);
system("pause");
}
int findConAncestor(int x,int y){
int i;
if(data[x]==0)
return -1;
else if(data[y]==0)
return -2;
while(x>0&&y>0){
if(x==y)
return x;
else if(x<y)
y/=2;
else
x/=2;
}
return 0;
}
总结
王道原题,就是多了几个输出。