如何确定节点w是否位于树中节点u和节点v之间的路径上?

时间:2017-06-20 04:25:21

标签: algorithm tree lowest-common-ancestor

我正在尝试解决一个问题,需要我确定节点是否位于树中节点u和节点v之间的路径上(不一定是二进制)。

例如,对于以下树:

    1
  2   3
4  5 6  7

节点2位于从节点4到7的路径上。

一个明显的解决方案是获取树的euler游览并遍历在两个节点的第一次出现之间访问的节点。但是,在最坏的情况下,这将是一个O(n)解决方案,其中n是树中节点的数量。我在某地读过这可以用LCA(最低共同祖先)来完成。但是,我似乎无法理解如何。有人可以告诉我吗?

1 个答案:

答案 0 :(得分:1)

说A = LCA(u,v)。 u和v之间的路径是从u到A和从A到v的路径。检查每个节点(从u向上,然后从v向上)。如果w在他们中间,那么它就在路径上,否则就不是。