有时我会遇到这样的面试问题: “查找树中任意 2 个节点的共同父节点”。我注意到他们也在谷歌、亚马逊等公司提出 LCA 问题。
正如维基百科所说,可以通过从给定节点到根的路径相交来找到 LCA,它需要 O(H),其中 H 是树的高度。此外,还有更高级的算法可以在 O(N) 中处理树并在 O(1) 中回答 LCA 查询。
我想知道面试官究竟想了解关于提出这个 LCA 问题的候选人的哪些信息。路径交叉的第一个算法似乎微不足道。他们是否希望候选人记住预处理算法?他们是否期望候选人能够即时发明这些算法和数据结构?