数据结构-已知二叉树按顺序结构进行存储,求编号分别为i,j结点的公共祖先

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];
}

你可能感兴趣的:(数据结构)