Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 查找树中一组节点之间的最长路径_Algorithm_Data Structures_Tree_Longest Path - Fatal编程技术网

Algorithm 查找树中一组节点之间的最长路径

Algorithm 查找树中一组节点之间的最长路径,algorithm,data-structures,tree,longest-path,Algorithm,Data Structures,Tree,Longest Path,最近遇到了一个编程问题 给定一棵树,可以是非二进制的,也可以是单链(或线性的),有N个节点 输入将是一组K节点,表示为a1、a2……ak。 我想找到从其中一个K节点开始并在其中一个K节点结束的最长简单路径(与开始节点不同)。 取决于N或K的对数算法应满足运行时间要求(例如:KlogK,KlogN),如果需要,应在我期望的时间限制内 谢谢也许你可以试试这种方法- 从任何节点运行DFS以查找最远的叶节点,让我们将其称为节点X 运行另一个DFS以查找距离X最远的节点 在步骤2中找到的路径是树中最长的路

最近遇到了一个编程问题

给定一棵树,可以是非二进制的,也可以是单链(或线性的),有N个节点

输入将是一组K节点,表示为a1、a2……ak。 我想找到从其中一个K节点开始并在其中一个K节点结束的最长简单路径(与开始节点不同)。 取决于N或K的对数算法应满足运行时间要求(例如:KlogK,KlogN),如果需要,应在我期望的时间限制内


谢谢

也许你可以试试这种方法-

  • 从任何节点运行DFS以查找最远的叶节点,让我们将其称为节点X
  • 运行另一个DFS以查找距离X最远的节点
  • 在步骤2中找到的路径是树中最长的路径

  • 这应该适用于所有树,而不仅仅是二叉树。

    是否必须命中每个节点?它可以重新访问节点吗?不,只在这些K节点开始和结束。路径简单,无法重新访问节点。我已经把这个词改好了。更详细地说,这里提到的算法可以找到任何树中最长的简单路径。因此,在你的例子中,你只需要剪掉树上“在”给定k个节点下面的任何部分。因此,首先从你的树开始,继续移除不在集合
    ai
    中的叶子。此时,所有的叶子都在给定的集合中。在此之后,运行上述3个步骤。移除树叶需要O(n),但在最坏的情况下,不会移除树叶。2个DFS各取O(n),总共O(3n)太慢:(