我是靠谱客的博主 温柔背包,最近开发中收集的这篇文章主要介绍树中第 K 远节点,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

有这样一个问题,给定一棵 N (2 ≤ N ≤ 150000)个节点的树,有 N - 1 条边,每边的长度为 L (1 ≤ L ≤ 1000000)对于每个节点 u,找出与 u 距离第 K 远的节点,输出这个距离。

有一个常规解法,列举出所有包含节点 u 的路径,遍历这些路径,找到第 K 远的节点,这也不是什么难事,n * n 复杂度。

列举包含所有路径的算法如下:枚举从一个叶子节点到另一个叶子节点的路径,若有 n 个叶子节点,则有 n * (n - 1)/2 条路径,设路径集合为 S,这些路径包含了这棵树中的所有路径(采用反证法,如果存在一条路径 p,没有被 S 包含,则向着叶子节点的方向,延长 p,直到 p 以叶子节点结束,得到新的路径 pp,它包含了 p,而 pp 一定被 S 包含,所以p 一定被 S 包含,所以假设不成立,故,树中任何一条路径一定被 S 包含)。

算法如下:

1.构建 HashMap<节点,距离)> nodeDistance;

2.那么以下标 i 遍历 S

最后

以上就是温柔背包为你收集整理的树中第 K 远节点的全部内容,希望文章能够帮你解决树中第 K 远节点所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(31)

评论列表共有 0 条评论

立即
投稿
返回
顶部