将节点的最大距离定义为距离的最大值 在该节点与树中的所有其他节点之间。我的问题是找到并打印树中所有节点的最大距离(不一定是二进制或任何东西)。基本上,对于每个节点,我需要打印出节点在我们正在查看的节点与树中任何其他节点之间的最大距离。运行时期望为O(n)。
我最好的方法都花费O(N ^ 2)时间,我不知道还有什么地方可以解决这个问题。我目前在树中的每个节点上运行BFS以找到树中每个节点的最大距离,但我认为更好的方法可能是使用某种形式的动态编程。我不确定。
提前感谢您的帮助。
答案 0 :(得分:0)
让我们选择一个任意节点作为根。现在我们已经有了一棵根树。
在子树中找到最远的节点很简单:它只是最高的叶子(子树中最远节点的子树动态编程可以工作)。
但是,如果它不在子树中呢?根不可能发生,所以我们有答案。让我们假设我们想要去看它的孩子。除了这个之外,我们需要考虑根中所有子项的子树中最远的叶子。在最坏的情况下,天真地对所有孩子进行迭代会给出n ^ 2的时间复杂度。但是我们可以通过存储两个最好的孩子来找到最佳的孩子,除了固定的孩子。我们可以为任何其他节点做同样的事情,因此它在线性时间内工作。