牛客网:最近公共祖先(满二叉树)
import java.util.*;
public class LCA {
/**
最近公共祖先
动态规划:定义状态,初始化状态,定义状态转移方程,进行输出
*/
public int getLCA(int a, int b) {
// write code here
/**
* 树中子节点与父节点之间的关系为root = child / 2 所以如果a != b,就让其中的较大数除以2,
* 如此循环直到a == b 即是原来两个数的最近公共祖先。比如: 2 和7的最近公共祖先:7/2 = 3 —> 3/2 = 1, 2/2 = 1,
* 得到1为它们的公共祖先。
*/
if(a == b || a == b/2){
return a;
}
if(b == a/2){
return b;
}
while(a != b){
if(a>b){
a=a/2;
}else{
b = b/2;
}
}
return a;
}
public static void main(String[] args){
System.out.print(new LCA().getLCA(2,3));
}
}