目录
牛客_CM24 最近公共祖先
解析代码
树中子节点与父节点之间的关系为root = child / 2 所以如果a = b,就让其中的较大数除以2, 如此循环直到a == b 即是原来两个数的最近公共祖先。比如题目所描述的满二叉树: 2 和7的最近公共祖先:7/2 = 3 ---> 3/2 = 1, 2/2 = 1, 得到1为它们的公共祖先。
class LCA {
public:
int getLCA(int a, int b) {
// 左孩 = 父 * 2 + 1,右孩 = 父 * 2 + 2;
// 父 = (孩 - 1) / 2;
// 1 2 3
// int a_f = a , b_f = b;
int a_f = a - 1, b_f = b - 1; // 让其对应平时的下标
while (a_f != b_f)
{
if (a_f > b_f) // 让大的找自己的父结点
{
a_f = (a_f - 1) / 2;
}
else
{
b_f = (b_f - 1) / 2;
}
}
// return a_f;
return a_f + 1;
}
};