将一棵无穷大满二叉树的节点按根节点一层一层地从左往右编号,根节点编号为1。
现给定a、b两个结点,设计一个算法,返回a、b最近的公共祖先编号。
注意:其祖先也可能是节点本身
eg:输入2,3
返回1
解决思路:
比如我们现在有这样一个满二叉树
a==b,我们直接返回a即可
a!=b
我们有一个公式
由子节点找父节点公式:parent=child/2
比如a=2,b=3
让其中较大的b=b/2,也就是b=1
然后a又成了较大的
a=a/2,也就是a=1,
这个时候a和b相等,就求出了最近公共祖先
public int getLCA(int a, int b) {
if(a==b){
return a;
}else{
while(a!=b){
if(a>b){
a=a/2;
}else{//a<b
b=b/2;
}
}
//由子节点找父节点公式:parent=child/2
}
return a;
}