给定一棵通用树,我想要两个节点之间的距离v
和w
。
维基百科声明如下:
计算最低共同祖先可能很有用,例如,作为确定树中节点对之间距离的过程的一部分:从 v 到 w 的距离可以计算为从根到 v 的距离,加上距离从根到 w,减去从根到它们最低共同祖先的距离的两倍。
假设d(x)
表示节点x
到我们设置的根的距离1
。表示两个顶点和d(x,y)
之间的距离。表示顶点对和的最低共同祖先。x
y
lca(x,y)
x
y
因此,如果我们有4
并且8
,lca(4,8) = 2
因此,根据上面的描述,d(4,8) = d(4) + d(8) - 2 * d(lca(4,8)) = 2 + 3 - 2 * 1 = 3
。太好了,这有效!
(8,3)
但是,对于顶点对( lca(8,3) = 2
) ,上述情况似乎失败了。然而,从图中可以看出d(8,3) = d(8) + d(3) - 2 * d(2) = 3 + 1 - 2 * 1 = 2.
距离是不正确的。d(8,3) = 4
对于跨越定义根的任何内容,该算法似乎都失败了。
我错过了什么?