我看到了许多不同的答案,并希望弄清楚哪个是正确的。给定无方向无根非二叉树时,是否可以在任何顶点A上运行BFS以从中获得最远的顶点B,然后在该B节点上运行BFS,这将导致B与生成的C之间的直径?
除此之外,如果确实正确,那么时间复杂度是多少?我看过O(E)和O(E + V)
答案 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)
是更好的恕我直言。