AcWing 3432. 二叉树
原题链接
简单
作者:
栗子ing
,
2022-07-18 21:11:55
,
所有人可见
,
阅读 1280
<=== 既然来了就点个小心心再走吧hh
1
、数据范围是2^31,所以层数最多就是31层,所以计算量最多就是输入的两个数的路径重合点,如果是根节点是重合点,然后他们处于31层,所以需要走31步就能够走到。
2
、因为是满二叉树, 加上二叉树的一些性质: [子节点的数 / 2]向下取整
就可以得到父节点,所以我们只需要每次判断x跟y哪个大,然后谁大就说明谁的层数比较深
或者 同层
,所以我们只需要每一次看谁大就除2
,看什么时候两个数相等,就说明那个点是重合点,最后直接输出x或者y都行
c++
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
int x, y;
int main()
{
cin >> x >> y;
while (true)
{
if (x > y) x /= 2;
else if (y > x) y /= 2;
else break;
}
cout << x << endl;
return 0;
}
java
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
int x = scan.nextInt();
int y = scan.nextInt();
while (x != y){
if (x > y) x /= 2;
else y /= 2;
}
System.out.println(x);
}
}
tql,每次的题解都思路简单明了,爱了爱了
❤️
好厉害
❤️
tql
❤️
太强了
❤️
一样的没写思路,hh
补上嘻嘻
我补了个python代码,hh