树的直径与树的中心

1.    树的直径

概念:树中的最长路。

求法:两次深搜或DP。

1-两次深搜:任找一点A为源点,深搜遍历得到最远点B,这个最远点B必定在直径中(感性想想,以A点为源点找到的最长路后面一段必定属于树的直径的一部分);再以这个最远点B为源点深搜遍历求一个最长路,这个最长路即为树的直径。

2-DP:显然最长路的两个端点必然是叶子或者根节点。设f(i)表示到i最远的叶子,g(i)表示到i次远的叶子,则有

f(i)=max{f(j)}+1;

g(i)=second{f(j)}+1;

其中j必须是i的儿子,计算顺序是自底向上。最终答案为

max{f(i)+g(i)}+1

 

2.    树的中心

概念:树的直径的中点。

求法:有多种,如DP,广搜,深搜等。

简单的方法是,先求树的直径,再找到直径中点即可。

你可能感兴趣的:(算法,动态规划,数据结构,树,直径,中心)