当前位置: 首页 > java >正文

寻找树的中心(重心)

题目:

思路:

“剥洋葱”:每次剥掉一层叶子结点,直到最后剩余不多于2个节点,这些节点就是树的中心(重心)。

解释:

1、根据图论的知识可以知道,一颗树的中心(重心)至多有两个

2、叶子结点对于树的“半径”贡献最大,逐层剥离叶子结点可以逼近中心(重心)

代码:

#include<iostream>
#include<vector>
#include<queue>
#include<utility>
using namespace std;vector<int> findMinHeightTrees(int n, const vector<pair<int, int>>& edges)
{if (n == 1) return { 0 };//只有一个节点//1、构建邻接表,度数表vector<vector<int>> adj(n);vector<int> degree(n, 0);for (auto& e : edges){int u = e.first;int v = e.second;adj[u].push_back(v);adj[v].push_back(u);degree[u]++;degree[v]++;}//2、把所有叶子结点入队queue<int> q;for (int i = 0; i < n; i++)if (degree[i] == 1)q.push(i);//3、迭代“剥洋葱”,直至剩≤2个点int remaining = n;while (remaining > 2)//每次删完一圈叶子才会来到判断部分{int sz = q.size();remaining -= sz;for (int i = 0; i < sz; i++){int u = q.front();q.pop();//删除u,并更新邻居的度for (int v : adj[u])if (--degree[v] == 1)q.push(v);}}//4、队列中的节点即为最小高度树的根vector<int> roots;while (!q.empty()){roots.push_back(q.front());q.pop();}return roots;
}int main()
{int n;cin >> n;vector<pair<int, int>> edges(n - 1);for (int i = 0; i < n - 1; i++){cin >> edges[i].first >> edges[i].second;}vector<int> roots = findMinHeightTrees(n, edges);cout << "最小高度树的根节点有:";for (int x : roots)cout << x << " ";cout << endl;return 0;
}

 运行结果:

http://www.xdnf.cn/news/6940.html

相关文章:

  • Mysql 索引概述
  • 通过多线程同时获取H264和H265码流
  • 本地缓存更新方案探索
  • 多模态模型如何处理任意分辨率输入——Tiling与Packing技术详解
  • CentOS 下 FTP 与 NFS 服务深度解析:从基础配置到实战应用
  • css 中 content: “\e6d0“ 怎么变成图标的?
  • 2000 元以下罕见的真三色光源投影仪:雷克赛恩Cyber Pro1重新定义入门级投影体验
  • 南航无人机大规模户外环境视觉导航框架!SM-CERL:基于语义地图与认知逃逸强化学习的无人机户外视觉导航
  • STM32F10xx 参考手册
  • ALIENTEK精英STM32F103开发板 实验0测试程序详解
  • 信息安全的基石:深入理解五大核心安全服务
  • NPN、PNP三极管的应用
  • 企业级电商数据对接:1688 商品详情 API 接口开发与优化实践
  • Pandas 掌握Matplotlib基础绘图①
  • 6to4、6over4的类比解释
  • MAUI之XAML标记扩展
  • Linux:计算机的层状结构
  • .NET 中管理 Web API 文档的两种方式
  • 指定elf文件dwarf 版本以及查看dwarf版本号
  • C++ 蓝桥 STEMA 真题模拟测试卷二
  • 程序中断方式好题分享
  • 日志系统**
  • 蓝桥杯11届国B 答疑
  • Redis内存管理深度解析
  • LeetCode --- 156双周赛
  • JAVA的常见API文档(上)
  • 高频面试题(含笔试高频算法整理)基本总结回顾110
  • 角点特征:从传统算法到深度学习算法演进
  • 电子电路:什么是色环电阻器,怎么识别和计算阻值?
  • React学习(二)-变量