考察二叉树的性质。节点i,左孩子为2i,右孩子为2i+1; 同理,左节点2i和右节点2i+1的父节点为i,只要除2即可。 不停的将x,y中较大的那个除2,当二者相等时就找到了公共父节点。
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int x, y;
while(cin >> x >> y){
if(x == 1 || y == 1){
cout << 1 << endl;
continue;
}
while(x != y){
if(x < y)
swap(x, y);
x /= 2;
}
cout << x << endl;
}
return 0;
}