最近公共祖先
题目来源
牛客网: 最近公共祖先
题目描述
将一棵无穷大满二叉树的结点按根结点一层一层地从左往右编号,根结点编号为1。现给定a,b为两个结点。设计一个算法,返回a、b最近的公共祖先的编号。注意其祖先也可能是结点本身。
示例1
输入
2 3
返回
1
思路分析
编号为整型,整型除法计算会舍去小数位,所以每个节点的父节点编号等于子节点编号除以二,对两个节点中编号较大的节点除2,直到两个节点相同为止。
如图演示编号为15和5找到最近祖先的过程:
代码展示
class LCA {
public:
int getLCA(int a, int b) {
while(a!=b)
{
if(a>b)
{
a/=2;
}
else
{
b/=2;
}
}
return b;
}
};