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

樹的直徑與樹的重心

遍歷 遞歸 處理 長度 樹的直徑 是否 col 節點 最小

樹的直徑

樹的直徑是指樹上的最長簡單路。

直徑的求法:兩遍搜索

任選一點w為起點,對樹進行搜索,找出離w最遠的點u。

以u為起點,再進行搜索,找出離u最遠的點v。

則u到v的路徑長度即為樹的直徑。

----------------------------------------------------------------

樹的重心
樹的重心:

找到一個點,其所有的子樹中最大的子樹節點數最少,那麽這個點就是這棵樹的重心。

刪去重心後,生成的多棵樹盡可能平衡。

樹的重心可以通過簡單的兩次搜索求出,第一遍搜索求出每個結點的子結點數量son[u],第二遍搜索找出使max{son[u],n-son[u]-1}最小的結點。

實際上這兩步操作可以在一次遍歷中解決。

對結點u的每一個兒子v,遞歸的處理v,求出son[v],然後判斷是否是結點數最多的子樹,

處理完所有子結點後,判斷u是否為重心。

樹的直徑與樹的重心