Tree 给定一个无向图,有可能找到最小高度的生成树吗?

Tree 给定一个无向图,有可能找到最小高度的生成树吗?,tree,breadth-first-search,minimum-spanning-tree,graph-traversal,topological-sort,Tree,Breadth First Search,Minimum Spanning Tree,Graph Traversal,Topological Sort,这是我的教授在课堂上问的问题,我有点困惑 我正在考虑遍历图形以获得一棵树。然后,为了确定最小高度,将树的每个顶点作为根,并比较高度。这是一个蛮力的方法,虽然,我想一个更优雅的解决方案 我发现这个网站解释了他们是如何使用类似于BFS拓扑排序的方法获得最小高度树的 根据OP,我们取两个指针,将它们指向阶数为1的顶点(叶),让它们以相同的速度移动。当两者相遇时,我们找到了根。但这让我很困惑,因为我们如何确保我们选择了正确的叶子(如果有一片叶子的路径更长呢?) 如果有人能帮助我进一步理解这一点,我将不胜

这是我的教授在课堂上问的问题,我有点困惑

我正在考虑遍历图形以获得一棵树。然后,为了确定最小高度,将树的每个顶点作为根,并比较高度。这是一个蛮力的方法,虽然,我想一个更优雅的解决方案

我发现这个网站解释了他们是如何使用类似于BFS拓扑排序的方法获得最小高度树的

根据OP,我们取两个指针,将它们指向阶数为1的顶点(叶),让它们以相同的速度移动。当两者相遇时,我们找到了根。但这让我很困惑,因为我们如何确保我们选择了正确的叶子(如果有一片叶子的路径更长呢?)


如果有人能帮助我进一步理解这一点,我将不胜感激。

他在两分球相遇后没有停止。他保留了其中一个节点,现在它指向一个内部节点(可能是根节点)。然后选择两个全新的叶指针,但在我继续之前,您需要了解“BFS拓扑排序”是如何工作的

尽管名字很硬,但实际上很简单。如果我们的答案树有高度
h
,我们会找到所有的叶子并删除它们。这会将深度
h-1
处的每个内部节点变成新的叶子。我们再次删除它们,这会在
h-2
处产生新的叶子,依此类推,除非我们达到高度0,这会产生根

所以,当这两个指针在一个节点中相遇时,它要么是根节点,要么是将来将成为叶节点的内部节点。在这种情况下,在将来的某个时刻,它将与上述过程中相同高度的另一个节点合作,并将我们引导到根节点,或者可能是另一个内部节点,然后将

我的建议是,完全忘记这两点。这样做是为了绘制与“路径图”示例平行的图形,但在上述教程中,这只会使原本简单的概念更加混乱

但在思考时,我偶然发现了另一种算法,我认为它比“BFS拓扑排序”更简单(至少在实现方面是如此)。选择任何节点作为根节点,执行后序遍历以查找其所有子节点的高度。假设我们的根有3个孩子身高
[2,3,8]
。想一想如果我们将“root ship”转移到
8
会发生什么。所有过去的孩子身高都小于8。新的根,即当前根的高度为4(第二高=3,加1)。所以,总高度现在是8。(或者更低,我们可以通过递归地重复我们现在对
8
的根所做的操作来发现。)