查找两个节点的最近父节点

时间:2012-02-07 08:19:22

标签: binary-tree

在树上找到两个给定节点的最近父母的最佳方法是什么? 如果我有:

                1
              /   \ 
             2     3
            / \   / \
           4  5  6   7  

5和6的最近父母将是一个 感谢

1 个答案:

答案 0 :(得分:2)

此问题称为最低共同祖先(LCA)问题。 (谷歌)

只需沿着parent链接向上爬,直到他们见面,就可以回答一个问题:

第一步是让下层节点爬升,直到它们处于相同的height

第二步是让他们同时攀爬,直到他们在同一个节点相遇。

然后该节点是这两个节点的LCA。

如果您需要处理多个查询,则需要使用更高级的算法。最省时的算法使用 O(n)时间进行预处理,并为每个查询使用 O(1)时间,其中<​​strong> n 是树中的总节点。