千家信息网

Java怎么实现最小高度树

发表于:2024-10-20 作者:千家信息网编辑
千家信息网最后更新 2024年10月20日,本篇内容主要讲解"Java怎么实现最小高度树",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Java怎么实现最小高度树"吧!题设要求树是一个无向图,其中任何
千家信息网最后更新 2024年10月20日Java怎么实现最小高度树

本篇内容主要讲解"Java怎么实现最小高度树",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Java怎么实现最小高度树"吧!

题设要求

树是一个无向图,其中任何两个顶点只通过一条路径连接。 换句话说,一个任何没有简单环路的连通图都是一棵树。

给你一棵包含 n 个节点的树,标记为 0 到 n - 1 。给定数字 n 和一个有 n - 1 条无向边的 edges 列表(每一个边都是一对标签),其中 edges[i] = [ai, bi] 表示树中节点 ai 和 bi 之间存在一条无向边。

可选择树中任何一个节点作为根。当选择节点 x 作为根节点时,设结果树的高度为 h 。在所有可能的树中,具有最小高度的树(即,min(h))被称为 最小高度树 。

请你找到所有的 最小高度树 并按 任意顺序 返回它们的根节点标签列表。

树的 高度 是指根节点和叶子节点之间最长向下路径上边的数量。

示例 1:

输入:n = 4, edges = [[1,0],[1,2],[1,3]]
输出:[1]
解释:如图所示,当根是标签为 1 的节点时,树的高度是 1 ,这是唯一的最小高度树。

示例 2:

输入:n = 6, edges = [[3,0],[3,1],[3,2],[3,4],[5,4]]
输出:[3,4]

提示:
1 <= n <= 2 * 104
edges.length == n - 1
0 <= ai, bi < n
ai != bi
所有 (ai, bi) 互不相同
给定的输入保证是一棵树,并且不会有重复的边

解题思路

  由上述两个图我们可以得出结论:题中需要求解的是树里面的中心节点,而每个树的中心节点不会超过两个。

  而我们想要求得树里面的中心节点,我们就可以逐层FBS(也就是逐层将出度为一的叶子节点剪掉),直至剪到最后一层,就可以将结果输出了!

算法

class Solution {    public List findMinHeightTrees(int n, int[][] edges) {        List res = new ArrayList();        //如果只有一个节点,则它就是最小高度树        if(n == 1){            res.add(0);            return res;        }        //每个节点的邻居数量        int [] degree = new int[n];        //每个节点的邻居        HashMap> map = new HashMap<>();        for(int [] edge : edges){            int a = edge[0];            int b = edge[1];            degree[a]++;            degree[b]++;            if(map.get(a) == null){                map.put(a,new ArrayList());//key:节点   value:邻居            }            if(map.get(b) == null){                map.put(b,new ArrayList());//key:节点   value:邻居            }            map.get(a).add(b);            map.get(b).add(a);        }        //建立队列        LinkedList leafNodes = new LinkedList();//表示叶子节点        //将所有度为1的节点入队        for(int i = 0;i < degree.length;i++){            if(degree[i] == 1){                leafNodes.add(i);            }        }        while(leafNodes.size() > 0){            res.clear();            //每一层节点的数量            int size = leafNodes.size();            for(int i = 0;i < size;i++){                int leaf = leafNodes.poll();                //将当前节点加入到结果集                res.add(leaf);                List neighbors = map.get(leaf);                //将出度减一,也就是将最外层的叶子节点剪掉                for(int neighbor : neighbors){                    degree[neighbor]--;                    if(degree[neighbor] == 1){                        //叶子节点入队                        leafNodes.add(neighbor);                    }                }            }        }        return res;    }}

到此,相信大家对"Java怎么实现最小高度树"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

节点 高度 最小 叶子 邻居 两个 数量 标签 无向 输入 输出 之间 也就是 内容 示例 结果 路径 一棵树 学习 选择 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 生物信息学与网络安全研究生 易讯通云桌面服务器软件 沈阳铭成网络技术有限公司 中北大学网络安全吗 信息系统 网络安全 软件开发商业计划书30字 奉贤区个人软件开发创新服务 网络安全板块有哪些股票 淘宝货源采集软件开发 哈工程 网络安全技术书 在数据库中新建用户 数据库技术分析推理 服务器功率一般多少 亿联网络技术软件测试 计算机网络技术学哪些内容 数据库的连接字符函数 如何从服务器安装电脑系统 香肠派对服务器崩溃送糖果 网络安全对照检查部队个人 服务器调试费记入什么科目 扬州企业软件开发推荐咨询 神经网络技术的主要研究内容 服务器重启数据库写入错误 建立材料和设备大数据库 游戏服务器指标 互联网科技李响 数据库的视图怎么连线 福彩数据库怎么进 湖北电商软件开发有用吗 广州人资优选互联网科技有限公司
0