哪种算法可以找到无根非二叉树的直径?

时间:2019-05-08 20:13:28

标签: computer-science graph-theory

给出无向无根非二叉树,我们必须在不使用递归方法的情况下,在最短的运行时间内找到所述树的直径之一。

我看到了许多不同的答案,并希望弄清楚哪个是正确的。给定无方向无根非二叉树时,是否可以在任何顶点A上运行BFS以从中获得最远的顶点B,然后在该B节点上运行BFS,这将导致B与生成的C之间的直径?

除此之外,如果确实正确,那么时间复杂度是多少?我看过O(E)和O(E + V)

1 个答案:

答案 0 :(得分:0)

  

我看到了许多不同的答案,并希望弄清楚哪个是正确的。给定无方向无根非二叉树时,是否可以在任何顶点A上运行BFS以从中获得最远的顶点B,然后在该B节点上运行BFS,这将导致B与生成的C之间的直径?

是的,该算法是正确的,d(B, C)是树的直径。您可以在this post上找到有关此算法的更多信息(及其工作原理)。

  

除此之外,如果确实正确,那么时间复杂度是多少?我看过O(E)和O(E + V)

您在树上运行了两次BFS。每个BFS的时间复杂度为O(V),因为每个顶点仅被访问一次。
在树中,始终会验证相等性E = V-1,因此对于在树上运行的任何算法O(V) = O(E) = O(E + V),两种表示法都是正确的。为了简单明了,O(V)是更好的恕我直言。