题解 | 二叉树

二叉树

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

全部评论

相关推荐

09-14 20:51
四川大学 Java
慢热的鲸鱼在学习:985加粗就行了,第二个项目来不及准备也没事,省的写了问你你还不会。你只需准备面试八股和项目场景,剩下的交给985。即使面不过也没事,面试经验是最重要的,你现在不缺时间
简历中的项目经历要怎么写
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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