bool is_left( int n )//是否为左节点
{
return n % 2 == 0;
}
bool is_right( int n )//是否为右节点
{
return 0 != n && ! is_left( n );
}
int father( int n )//父亲节点
{
if ( 1 == n ) return -1;
return n / 2;
}
int left_most( int n ) //得到节点n同层里最左边的点
{//这个你稍微推算一下就好,嗯
int res =1;
while ( n > 1 )
{
n /= 2;
res *= 2;
}
return ;
}
int common_ancestor( int n , int m ) //得到m和n的共同祖先,
{
if ( m == n )
return m;
if ( m != n && m == 0 || n == 0 )
return 0;//不存在共同祖先
return common_ancestor( father ( m ) , father( n ) ) ;
}