树的中心

图论 / tree-center

本地源文件:docs/graph__tree-center.md

树的中心

定义

在树中,如果节点 𝑥x 作为根节点时,从 𝑥x 出发的最长链最短,那么称 𝑥x 为这棵树的中心.

性质

  • 树的中心不一定唯一,但最多有 22 个,且这两个中心是相邻的.
  • 树的中心一定位于树的直径上.
  • 树上所有点到其最远点的路径一定交会于树的中心.
  • 当树的中心为根节点时,其到达直径端点的两条链分别为最长链和次长链.
  • 当通过在两棵树间连一条边以合并为一棵树时,连接两棵树的中心可以使新树的直径最小.
  • 树的中心到其他任意节点的距离不超过树直径的一半.

求法

寻找一个点 𝑥x,使其作为根节点时,最长链的长度最短.

具体步骤

  1. 维护 𝑙𝑒𝑛1𝑥len1x,表示节点 𝑥x 子树内的最长链.
  2. 维护 𝑙𝑒𝑛2𝑥len2x,表示不与 𝑙𝑒𝑛1𝑥len1x 重叠的最长链.
  3. 维护 𝑢𝑝𝑥upx,表示节点 𝑥x 子树外的最长链,该链必定经过 𝑥x 的父节点.
  4. 找到点 𝑥x 使得 max(𝑙𝑒𝑛1𝑥,𝑢𝑝𝑥)max(len1x,upx) 最小,那么 𝑥x 即为树的中心.

参考代码

---|---

### 示例

假设我们有一棵树,如下所示:

---|---

  • 树的直径为 𝐷 →𝐵 →𝐴 →𝐶 →𝐹D→B→A→C→F.直径长度为 44
  • 树的中心为节点 𝐴A,因为从 𝐴A 出发的最长链(到 𝐷D 或 𝐹F)均为 22
  • 如果将 𝐵B 或 𝐶C 作为树的根,则从这些节点出发的最长链将增加,因此它们不是树的中心.

时间复杂度

上述算法的时间复杂度为 𝑂(𝑛)O(n),其中 𝑛n 是树中节点的数量.

参考

本页面最近更新: 2026/1/7 08:56:54,更新历史 发现错误?想一起完善?在 GitHub 上编辑此页! 本页面贡献者:littleparrot12345, Tiphereth-A 本页面的全部内容在CC BY-SA 4.0SATA 协议之条款下提供,附加条款亦可能应用