[英]Given a tree, find the kth node in the path from node 'a' to node 'b' in Log(n)?
给定一棵树,我需要在从“ a”到“ b”的路径中找到第k个节点。 这意味着我需要在从节点“ a”到节点“ b”的路径中的“ kth”位置找到该节点。 我在考虑最低共同祖先和/或强光分解的路线,但是我不确定这是否是这样做的方式。 朝着正确方向的任何指导表示赞赏。
细节:
由于查询数量很大,因此无法选择将BFS应用于每个查询(从“ a”到“ b”的第k个节点)。
做最普通的祖先,并为每个节点保留其深度(到根的距离)。
接下来找出第k个节点在a到lca还是lca到b部分。 深度差是它们之间节点的数量,因此,如果depth[a] - depth[lca] > k
则该节点位于lca-b部分。
如果节点在a到lca部分,则只需找到a的第k个祖先。 应该使用您预先计算的LCA数据为log(N)。
如果该节点位于b到lca部分,则可以计算k',它是第k个节点到b的距离( k' = 1 + depth[a] + depth[b] - 2*depth[lca] - k)
),然后获得b的k'祖先(同样很容易获得LCA数据)。
总体而言,所有查找都是logN,其他步骤是恒定的,因此您对每个查询执行O(LogN)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.