Answers:
然·G。(Ran G.)提出了一种有效算法的提示,尽管他可能遗漏了一些细节。如果要一遍又一遍地进行工作,例如,如果先计算每个路径然后计算长度,则计算所有根叶路径的确确实会有点效率低下。
从下面开始执行以下递归算法LongestPath(root)
将给出您想要的。本质上,它递归计算每个子树的最长路径。在每个节点上,这需要构建新路径并返回最长的路径。
LongestPath(node)
If node is a leaf, return (node,0)
If node is not a leaf:
For each edge (node,length,next):
Let (p,l) = LongestPath(next)
Let (path,len) = (p++[next], l + length)
Return element (path,len) from previous step with largest value len
如果这是伪代码与某些Haskell表示法的结合,则我希望它是可以理解的。