news 2026/1/13 22:05:59

最小高度树

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
最小高度树

这个题需要复杂的证明,这里不再用数学证明。

  • 最小高度树的高度公式

    • 设树中距离最远的两个节点为 x, y它们之间的距离为maxdist = dist[x][y]

    • 则任意最小高度树的高度为

      minheight=⌈maxdist​/2⌉
    • 换句话说,最小高度树的高度是最长路径长度的一半向上取整。

  • 最小高度树的根节点位置

    • 根节点一定在这条最长路径上。

    • 如果根不在最长路径上,则无论怎么选,高度都不可能小于minheight,会和最长路径长度矛盾。

只是说一说直觉就可以理解的。

  • 想象最长路径是一条线,根放在中间,两边叶子到根的距离最均衡,形成最小高度。

  • 如果根偏离这条路径,则最长的一边会更长,高度反而变大。

  • 树的高度取决于最远的叶子对

  • 把根放在最远叶子对的中间,让两边尽量平衡。

  • 就像把跷跷板的支点放在中间,重量(距离)最均衡,高度最小。

因此我们只需要求出路径最长的两个叶子节点即可,并求出其路径的最中间的节点即为最小高度树的根节点。可以利用以下算法找到图中距离最远的两个节点与它们之间的路径:

以任意节点 p 出现,利用广度优先搜索或者深度优先搜索找到以 p 为起点的最长路径的终点 x(树没有环,所以从任意节点出发,沿着最长的分支走,最远的点一定落在最长路径的某个端点上。);以节点 x 出发,找到以 x 为起点的最长路径的终点 y;x 到 y 之间的路径即为图中的最长路径,找到路径的中间节点即为根节点。

有了以上前置知识,我们使用拓扑排序的方法进行求解,不再使用深度搜素和广度搜索的方法:

class Solution { public: vector<int> findMinHeightTrees(int n, vector<vector<int>>& edges) { if(n==1) return {0}; //创建邻接矩阵 vector<unordered_set<int>> graphs(n); for(auto& e:edges){ graphs[e[0]].insert(e[1]); graphs[e[1]].insert(e[0]); } vector<int> leves; //找叶子节点 for(int i =0;i<n;i++){ if(graphs[i].size()==1) leves.push_back(i); } // 删结点 int remaining=n; while(remaining>2){ remaining-=leves.size(); vector<int> newleves; //删边 for(auto e:leves){ int ajx=*(graphs[e].begin()); graphs[ajx].erase(e); if(graphs[ajx].size()==1) newleves.push_back(ajx); } leves=newleves; } return leves; } };

思路总结

  1. 树的最小高度树的根一定在最长路径的中间 → 对应最终剩下 1 或 2 个节点

  2. 剥叶子法

    • 反复删除所有叶子节点(度 = 1)

    • 剩下的节点就是最小高度树的根

  3. 时间复杂度 O(n),空间复杂度 O(n)。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/1 5:15:21

你还在云端跑AutoGLM?揭秘如何将Open-AutoGLM本地化部署至手机端

第一章&#xff1a;你还在云端跑AutoGLM&#xff1f;揭秘本地化部署的意义 随着大模型应用的普及&#xff0c;越来越多开发者开始关注 AutoGLM 的实际部署方式。尽管云服务提供了便捷的接入路径&#xff0c;但将模型本地化运行正成为技术团队的新选择。本地部署不仅提升了数据隐…

作者头像 李华
网站建设 2026/1/5 3:16:52

UABEA终极指南:解锁Unity游戏资源提取的完整解决方案

想要深度探索Unity游戏资源&#xff0c;却苦于找不到合适的工具&#xff1f;UABEA&#xff08;Unity Asset Bundle Extractor Avalonia&#xff09;正是你需要的完美解决方案。作为一款专为新版本Unity设计的开源资源提取器&#xff0c;它能够帮你轻松打开游戏资源宝库&#xf…

作者头像 李华
网站建设 2026/1/9 12:15:17

Open-AutoGLM 电脑版 vs 其他AI编程工具(实测对比8项核心指标)

第一章&#xff1a;Open-AutoGLM 电脑版 vs 其他AI编程工具&#xff08;实测对比8项核心指标&#xff09;在AI编程助手快速发展的背景下&#xff0c;Open-AutoGLM 电脑版以其本地化部署、零数据外泄和对中文代码的深度优化脱颖而出。本文基于实测环境&#xff08;Windows 11 i…

作者头像 李华
网站建设 2025/12/29 14:07:16

Open-AutoGLM云机入门到精通(99%工程师忽略的关键配置细节)

第一章&#xff1a;Open-AutoGLM云机的核心架构解析Open-AutoGLM云机是一种面向生成式AI任务的高性能云端推理与训练一体化架构&#xff0c;专为支持大规模语言模型&#xff08;LLM&#xff09;的动态调度与低延迟响应而设计。其核心在于融合了异构计算资源管理、模型并行优化与…

作者头像 李华
网站建设 2026/1/12 8:18:22

揭秘Open-AutoGLM移动端部署难点:3大技术瓶颈与破解方案

第一章&#xff1a;Open-AutoGLM移动端部署的背景与意义随着人工智能技术的快速发展&#xff0c;大语言模型在云端已展现出强大的自然语言理解与生成能力。然而&#xff0c;受限于网络延迟、数据隐私和推理成本&#xff0c;将模型能力下沉至终端设备成为新的趋势。Open-AutoGLM…

作者头像 李华
网站建设 2026/1/10 15:07:14

多平台直播录制神器:一键保存所有精彩内容

多平台直播录制神器&#xff1a;一键保存所有精彩内容 【免费下载链接】DouyinLiveRecorder 项目地址: https://gitcode.com/gh_mirrors/do/DouyinLiveRecorder 在直播盛行的时代&#xff0c;你是否曾为错过心仪主播的精彩表演而遗憾&#xff1f;是否想要永久保存那些值…

作者头像 李华