树的中心
定义
在树中,如果节点 \(x\) 作为根节点时,从 \(x\) 出发的最长链最短,那么称 \(x\) 为这棵树的中心。
性质
- 树的中心不一定唯一,但最多有 \(2\) 个,且这两个中心是相邻的。
- 树的中心一定位于树的直径上。
- 树上所有点到其最远点的路径一定交会于树的中心。
- 当树的中心为根节点时,其到达直径端点的两条链分别为最长链和次长链。
- 当通过在两棵树间连一条边以合并为一棵树时,连接两棵树的中心可以使新树的直径最小。
- 树的中心到其他任意节点的距离不超过树直径的一半。
求法
寻找一个点 \(x\),使其作为根节点时,最长链的长度最短。
具体步骤
- 维护 \(len1_x\),表示节点 \(x\) 子树内的最长链。
- 维护 \(len2_x\),表示不与 \(len1_x\) 重叠的最长链。
- 维护 \(up_x\),表示节点 \(x\) 子树外的最长链,该链必定经过 \(x\) 的父节点。
- 找到点 \(x\) 使得 \(\max(len1_x, up_x)\) 最小,那么 \(x\) 即为树的中心。
参考代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
|
示例
假设我们有一棵树,如下所示:
1 2 3 4 5 |
|
- 树的直径为 \(D \rightarrow B \rightarrow A \rightarrow C \rightarrow F\)。直径长度为 \(4\)。
- 树的中心为节点 \(A\),因为从 \(A\) 出发的最长链(到 \(D\) 或 \(F\))均为 \(2\)。
- 如果将 \(B\) 或 \(C\) 作为树的根,则从这些节点出发的最长链将增加,因此它们不是树的中心。
时间复杂度
上述算法的时间复杂度为 \(O(n)\),其中 \(n\) 是树中节点的数量。
参考
- TutorialsPoint: Centers of a Tree
- ProofWiki: Definition of Center of Tree
- Wikipedia: Tree (graph theory)
本页面最近更新:,更新历史
发现错误?想一起完善? 在 GitHub 上编辑此页!
本页面贡献者:littleparrot12345
本页面的全部内容在 CC BY-SA 4.0 和 SATA 协议之条款下提供,附加条款亦可能应用