有一棵无穷大的满二叉树,其结点按根结点一层一层地从左往右依次编号,根结点编号为1。现在有两个结点a,b。请设计一个算法,求出a和b点的最近公共祖先的编号。
首先我们可以知道这是一个满二叉树,并且根节点为1。所以问题就很简单化了:满二叉树的节点与父节点的关系为:节点值/2=父节点值。 因此: 当a!=b的时候就一直循环,将大的那个除以2,再比较是否相同,直到相同为止。这样就容易写出来了。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
while(scanner.hasNext()){
int a=scanner.nextInt();
int b=scanner.nextInt();
while(a!=b){
if(a>b){
a=a/2;
}else {
b=b/2;
}
}
System.out.println(a);
}
}
}