在树上找到两个给定节点的最近父母的最佳方法是什么? 如果我有:
1
/ \
2 3
/ \ / \
4 5 6 7
5和6的最近父母将是一个 感谢
答案 0 :(得分:2)
此问题称为最低共同祖先(LCA)问题。 (谷歌)
只需沿着parent
链接向上爬,直到他们见面,就可以回答一个问题:
第一步是让下层节点爬升,直到它们处于相同的height
。
第二步是让他们同时攀爬,直到他们在同一个节点相遇。
然后该节点是这两个节点的LCA。
如果您需要处理多个查询,则需要使用更高级的算法。最省时的算法使用 O(n)时间进行预处理,并为每个查询使用 O(1)时间,其中<strong> n 是树中的总节点。