树的直径

关于树的直径的求解算法

树的直径的定义:树中最长的简单路径。

下图中的从1 → 4 → 6 → 8的路径,便是该树的直径。

这里写图片描述

求树的直径的算法简单的描述为两步:

(1) 任选一点,以该点为起点计算得到离自己最远的点。

(2) 用(1)步求得的点为起点,计算离起点最远的点,这两点间的距离即为树的直径。

简单的证明(非严格数学证明)

从树的直径的求解算法中,第一步是任选一点,然后找到离该点最远的点。从算法的步骤中,可以看出,该离被选点最远的点一定是树的直径路径上的端点。先假设选中的点是A,离A最远的点是C,来证明C点一定是直径路径上的端点。

分类讨论:

(1)选取的A点是直径上的点,则以A为起点,离A最远的点一定是树的直径的端点。反证法,如果离A最远的点,不在树的直径的路径上,如下图的C’所示,如果
这种情况发生则DA + AC’ > DA + AC,与DAC为树的直径是冲突的(下图中的DAC为原来的直径路径),DAC’将成为新的直径,所以离A最远的点,一定是树的直径的端点。
这里写图片描述

(2)选取的点A不是直径上的点,原图的直径为DOC所形成的路径,假设离A最远的点C’不在直径上,则取树的直径上的点O,则一定有AC’ > AO + OC,则
DO + OA + AC’ > DO + OA + (AO + OC) = DO + OC + 2AO > DO + OC,这与DOC是原图的直径这一点是矛盾的。所以离A最远的点C必然在树的直径端点上。

这里写图片描述

通过上面的分析,已经通过步骤一找到了直径的一个端点,找到树的直径的方法也就顺理成章了。关于具体的代码实现,可以搜索其他博客的详细内容这里不再详述。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值