在二叉树中找到最小的共同祖先,用o(h ^ 2)进行更改

时间:2015-06-19 23:10:02

标签: graph graph-theory theory least-common-ancestor

在考虑编写实现它的功能之前,我试着想一个算法。 h表示主要父节点与给定节点之间的最大距离。它应该以o(h ^ 2)运行,这意味着应该更容易想出这样的算法,但我经常发现自己使用o(h)算法。当我理解我是否正在进行h ^ 2操作时,我也感到困惑。我真的可以使用铅。

1 个答案:

答案 0 :(得分:2)

最简单的LCA算法将在O(h^2)中运行 - 制作两个嵌套循环,一个在第一个顶点的所有祖先上运行,另一个在第二个顶点的所有祖先上运行,在循环内部只是比较它们。 / p>

a1 = a  // a is the first given vertes
while a1 != nil   // assume root's parent is nil
    a2 = b  // b is the second given vertex
    while a2 != nil 
        if (a1 == a2) 
            compare with current-best solution
        a2 = a2.parent
   a1 = a1.parent

所以,从第一个给定的顶点开始,即通过它的所有祖先。对于它的每个祖先a1,从第二个给定的顶点到根,检查你是否在路上遇到a1顶点。