1. 程式人生 > >樹的直徑與樹的中心

樹的直徑與樹的中心

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,廣搜,深搜等。

簡單的方法是,先求樹的直徑,再找到直徑中點即可。