我正在尝试在java中的n-ary树中实现多个节点的LCA。我正在使用句子的解析树,因此可以合理地假设一个节点的子节点数<= 6.这里的多个节点是句子中的两个短语(连续单词序列)。设k为所涉及的节点数。
一种方法是找到k / 2对的两个节点的LCA,我们将获得k / 2个节点。现在递归这些k / 2节点。顺序将是O(nlog k),其中O(n)是线性LCA发现算法的复杂性。我能更有效地做到吗?
答案 0 :(得分:1)
我使用短语的节点是连续的,即在解析树的叶节点列表中具有连续索引的事实解决了该问题。
让segment1
包含从start1
到end1
的索引。 segment2 = (start2,end2)
也是如此。
(start1, end1)
和(start2, end2)
的必需公共祖先是具有索引min(start1,start2)
和max(end1,end2)
的节点的共同祖先。