📜个人简介 |
⭐️个人主页:摸鱼の文酱博客主页🙋♂️
🍑博客领域:java编程基础,mysql
🍅写作风格:干货,干货,还是tmd的干货
🌸精选专栏:【Java】【mysql】 【算法刷题笔记】
🎯博主的码云gitee,平常博主写的程序代码都在里面。
🚀支持博主:点赞👍、收藏⭐、留言💬
🍭作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!
📃最近公共祖先
🎯1.原题链接
🎯2.题目要求
将一棵无穷大满二叉树的结点按根结点一层一层地从左往右编号,根结点编号为1。现给定a,b为两个结点。设计一个算法,返回a、b最近的公共祖先的编号。注意其祖先也可能是结点本身。
样例输入:2 3
样例输出:1
🎯3.基础框架
java版本的基础框架代码如下:
import java.util.*;
public class LCA {
public int getLCA(int a, int b) {
// write code here
}
}
🎯4.解题思路
1.满二叉树的节点与父节点的关系为:节点值/2=父节点值。
2.因此: 当a!=b的时候就一直循环,将大的那个除以2,再比较是否相同,直到相同为止。
🎯5.完整代码
import java.util.*;
public class LCA {
public int getLCA(int a, int b) {
// write code here
while (a != b) {
if (a > b) a /= 2;
if (b > a) b /= 2;
}
return a;
}
}