在具有父ID的常规树中找到最低公共祖先

时间:2014-12-02 15:11:53

标签: c++ tree big-o lowest-common-ancestor

我的问题是找到将从txt文件中的列表创建的常规树的LCA。我正在寻找最有效的实施方案。数据采用以下形式: Id,info,ParentId

数据未以任何方式排序。我在考虑创建一棵树,但至少需要O(nlogn)。虽然日志基数不是2.这取决于我想的平均儿童数量。

相反,如果我将节点存储在哈希表中,那么找到LCA将优于O(nlogn)。对?对于目标节点的每个父节点,我必须知道它是否已被源节点访问过(假设我们从源节点开始到根节点并在访问的路上标记所有父节点),这需要O (LOGN)。因为,我们只检查父母,它会比O(nlogn)更好。

有更好的主意吗?

1 个答案:

答案 0 :(得分:0)

假设你的树在某种程度上是平衡的,即。 O(logn)高度,哈希表数据结构应该给出O(n)算法。

从源和目标到root的第一个跟踪。您将有两条长度为O(logn)的路径。例如。 SXYZR和DWYZR。 S和D是源和目的地。 R是根。这需要O(logn)时间。

然后你可以找到最长的后缀,即YZR。 Y将是LCA。这需要O(logn)时间。

请记住,您需要O(n)时间来读取输入并构建哈希表。