题解 | 二叉树

二叉树

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")

全部评论

相关推荐

zhiyog:哈哈哈,其实是津巴布韦币
点赞 评论 收藏
分享
野猪不是猪🐗:现在的环境就是这样,供远大于求。 以前卡学历,现在最高学历不够卡了,还要卡第一学历。 还是不够筛,于是还要求得有实习、不能有gap等等... 可能这个岗位总共就一个hc,筛到最后还是有十几个人满足这些要求。他们都非常优秀,各方面都很棒。 那没办法了,看那个顺眼选哪个呗。 很残酷,也很现实
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务