.
假设一棵树的存储结构采用双亲表示法,双亲指针数组为int parent[MaxSize],
其中MaxSize表示双亲指针数组的最大结点个数。
树中各个结点按先根遍历次序存放,根结点存于parent[0]。
试编写一个函数,计算p所指结点和q所指结点的最近公共祖先结点。
【解答】
这是一个二重循环。外层循环从结点 p向双亲方向循环,每变动一个结点,即对从结点 q到根的路径上各结点进行检测,遇到外层循环当前标定的结点即终止。此结点即为所求。
int CommonAncestry ( int parent[ ], int MaxSize, int p, int q ) {
int i, j;
for ( i = p; i != -1; i = parent[i] )
for ( j = q; j != -1; j = parent[j] )
if ( i == j ) return i;
}