1.算法思想
若i>j
,则先求i
的父结点i/2
。若 i/2 = j
,则说明结点i
及结点j
的公共父结点为i/2
。若i/2 != j
,则令i = i/2,并继续进行循环,直到出现i=j
的情况。那么j>i的情况与之类似
2.实现代码
①递归实现
ElementType Comm_Ancestor(SqTree T,int i,int j){
if(i==j){ //递归出口
return T[i];
}
else if(i>j){
i = i/2;
Comm_Ancestor(T,i,j);
}
else{
j = j/2;
Comm_Ancestor(T,i,j);
}
}
②非递归实现
ElementType Comm_Ancestor(SqTree T,int i,int j){
while(i!=j){
if(i>j)
i = i/2;
else
j = j/2;
}
return T[i];
}