二叉树(二叉树上LCA)

题意

给定一个从\(1\)开始编号的二叉树,给定两个点\(x\)\(y\),求他们的最近公共祖先。

题目链接:https://www.acwing.com/problem/content/3435/

数据范围

\(1 \leq x, y \leq 2^31 - 1\)

思路

首先可以观察出一个性质,就是节点的编号除以\(2\),就得到其父亲的编号。

因此,如果\(x\)的编号比\(y\)大,那么\(x / 2\);反之,\(y / 2\)。循环进行,直到二者编号相等为止。

代码

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>

using namespace std;

int x, y;

int main()
{
    cin >> x >> y;
    while(x != y) {
        if(x > y) x /= 2;
        else y /= 2;
    }
    cout << x << endl;
    return 0;
}
posted @ 2022-07-19 09:11  pbc的成长之路  阅读(33)  评论(0编辑  收藏  举报