我有一个问题,我要找到图表的最小可能深度,这意味着我必须找到每个节点的最大深度,并返回所有节点中的最小深度。显然,每个节点的简单DFS都可以解决这个问题,但是当输入非常大的时候事情变得疯狂时,DFS会变得效率低下(时间限制)。我尝试将每个叶子的距离保持在内存中探索的节点,但这没有多大帮助。
如何有效地找到非常大的图形的最小深度。值得注意的是,有问题的图表无周期。
答案 0 :(得分:9)
要找到无向树形图的图形中心/中心,您可以:
在算法的最后阶段删除的节点/节点将是树的图形中心。
每个节点都被删除一次,因此整个过程可以在O(n)中完成。
答案 1 :(得分:0)
你似乎要寻找的是直径 / 2.你可以计算一个树的直径,如下所示,并将其称为findDiameter(n, null)
,用于任意节点{{1这棵树。
n
你需要做的就是在邻居的循环中跟踪最大直径和2个最大深度。