题目描述
将一棵无穷大满二叉树的结点按根结点一层一层地从左往右编号,根结点编号为1。现给定a,b为两个结点。
设计一个算法,返回a、b最近的公共祖先的编号。注意其祖先也可能是结点本身。
eg:
输入:
2,3
输出:
1
以下是本篇文章正文内容,下面案例可供参考
解题思路
满二叉树的子节点与父节点的关系为:root = child/2
所以,当a=b时,返回a或b就是他的父节点,
当a!=b时,将较大的数/2,直到a=b,返回a或b就是他的父节点
代码如下
import java.util.*;
public class Main {
public int getLCA(int a, int b) {
while (a != b) {
if (a > b) {
a /= 2;
} else {
b /= 2;
}
}
return a;
}
}