题解 | 二叉树

二叉树

https://www.nowcoder.com/practice/5b80ab166efa4551844657603227caeb

#include <iostream>
#include<vector>
using namespace std;


int main() {
    int x, y;
    while (cin >> x >> y) {
        vector<int> path1;
        while (x != 0) {
            path1.push_back(x);
            x /= 2;
        }
        vector<int> path2;
        while (y != 0) {
            path2.push_back(y);
            y /= 2;
        }
        int i = 0, j = 0;
        while (path1.size() - i != path2.size() - j) {
            //公共祖先还是要用爬山法
            if (path1.size() - i > path2.size() - j) {
                i++;
            }
            else if (path1.size() - i < path2.size() - j) {
                j++;
            }
        }
        for (; i < path1.size() && j < path2.size(); i++, j++) {
            if (path1[i] == path2[j]) {
                cout << path1[i]<<endl;
                break;
            }
        }
    }
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

这一集&nbsp;硕士输的很惨
找工作ing10:就是这样不是硕士不愿意脱下长衫,是人家觉得屈才了
点赞 评论 收藏
分享
frutiger:逆天,我家就安阳的,这hr咋能说3k的,你送外卖不比这工资高得多?还说大厂来的6k,打发叫花子的呢?这hr是怎么做到说昧良心的话的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务