满二叉树中任意两个结点的公共祖先

题目

有一棵无穷大的满二叉树,其结点按根结点一层一层地从左往右依次编号,根结点编号为1。现在有两个结点a,b,求出a和b点的最近公共祖先的编号。

分析

满二叉树的子节点与父节点之间的关系为root = child / 2 ,如果a != b,就让其中的较大数除以2, 如此循环直到a == b, 即是原来两个数的最近公共祖先。

class LCA {
public:
    int getLCA(int a, int b) {
        // write code here
        while(a != b){
            if(a > b)
                a /= 2;
            else
                b /= 2;
        }
        return a;
    }
};
    原文作者:满二叉树
    原文地址: https://blog.csdn.net/xiongqiaochu/article/details/72723489
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞