A: 二叉树结点公共祖先
一个顺序存储的完全二叉树:
1
/ \
2 3
/ \ / \
4 5 6 7
...
任意给定两结点的编号,求两结点最近的公共祖先。
Input
每组数据一行,为空格隔开的两个数i和j,皆为32位有符号正整数
Output
每组数据对应一行,为编号为i和j的结点的最近公共祖先的编号
Sample Input
4 5
4 7
Sample Output
2
1
#include <stdio.h>
int main(){
int m,n;
while(~scanf("%d %d",&m,&n)){
while(m!=n){
if(m>n)
m=m/2;
else
n=n/2;
}
printf("%d\n",m);
}
return 0;
}