树的最大深度 java,树的最小高度
00-1010问题设置要求例1:例2:解题思路算法
00-1010树是一个无向图,其中任意两个顶点仅由一条路径连接。换句话说,任何没有简单回路的连通图都是树。
给你一个有N个节点的树,标为0到n-1。给定数目n和具有n-1条无向边的边列表(每条边是一对标签),其中edges[i]=[ai,bi]表示在树中的节点ai和bi之间存在一条无向边。
您可以选择树中的任何节点作为根。当选择节点X作为根节点时,设结果树的高度为h,在所有可能的树中,高度最小(即min(h))的树称为最小高度树。
请找出所有最小高度的树,并以任意顺序返回它们的根节点标签列表。
树高是指根节点和叶节点之间最长向下路径的数目。
目录
输入:n=4,edges=[[1,0],[1,2],[1,3]]输出:[1]说明:如图所示,当根是一个标号为1的节点时,树的高度为1,是唯一的最小高度树。
题设要求
输入:n=6,边=[[3,0],[3,1],[3,2],[3,4],[5,4]]输出:[3,4]
提示:1=n=2 *个边。length==n-10=AI,Binai!=bi All (ai,bi)互不相同。给定的输入保证是一棵树,不会有重复的边。
00-1010从上面两张图可以得出一个结论:问题中需要求解树中的中心节点,每棵树中的中心节点不会超过两个。
而如果我们要找到树中的中心节点,可以用FBS一层一层的切掉度数的叶节点(也就是一层一层的切掉度数的叶节点)直到切完最后一层,然后就可以输出结果了!
示例 1:
类解决方案{ public list integer findMinHeightTrees(int n,int[][]edges){ list integer RES=new ArrayListInteger();//如果只有一个节点,则是最小高度树If(n==1){ RES . add(0);返回res}//每个节点的邻居数int[]degree=new int[n];//每个节点的邻居hashmap整数,list integer map=new hashmap();for(int[]edge : edges){ int a=edge[0];int b=edge[1];学位[a];学位[b];if(map.get(a)==null){ map.put(a,new ArrayListInteger());///key:节点值: neighbor } if(map . get(b)==null){ map . put(b,new ArrayList integer());///key:节点值:邻居} map.get(a)。添加(b);map.get(b)。增加(a);}//建立队列链表整数叶节点=新链表整数();//指示叶节点//对所有阶数为1的节点进行排队(int I=0;I度.长度;I){ if(degree[I]==1){ leaf nodes . add(I);} } while(leaf nodes . size()0){ RES . clear();//每层节点数int size=leaf nodes . size();for(int I=0;I尺寸;I){ int leaf=leaf nodes . poll();//将当前节点添加到结果集RES . Add(leaf);list integer neighbors=map . get(leaf);//度减一,即对于(int neighbor : neighbors){ degree[neighbor]-,砍掉最外面的叶子节点;If(degree[neighbor]==1){ //叶子节点入队,leaf nodes . add(neighbor);} } } }返回res}}就是这样。本文介绍了Java实现最小高度树的方法。关于Java最小高度树的更多信息,请搜索热门IT之前的文章或者继续浏览下面的相关文章。我希望你以后能更多地支持流行音乐!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。