题目描述
给定一棵树,求出这棵树的直径,即树上最远两点的距离。
包含n个结点,n-1条边的连通图称为树。
示例1的树如下图所示。其中4到5之间的路径最长,是树的直径,距离为5+2+4=11
示例1
输入
1 | 6,[[0,1],[1,5],[1,2],[2,3],[2,4]],[3,4,2,1,5] |
返回值
1 | 11 |
通用解法
对于此类问题,我们需要构建图来做深度优先搜索。
首先,根据父子关系及边权重构建无向图;
然后,随机找一顶点,利用深度优先搜索找到距离该点最远的顶点remote。
最后,从remote顶点开始深度优先搜索找到最长路径,该路径即为直径。
巧妙解法
我们记录每个节点向下,所能延伸的最远距离 $d_1$,和次远距离$d_2$ ,那么直径就是所有$d_1+d_2$ 的最大值。
1 |
|
参考文献