Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从图的节点跟踪树的最小高度_Java_Algorithm_Graph - Fatal编程技术网

Java 从图的节点跟踪树的最小高度

Java 从图的节点跟踪树的最小高度,java,algorithm,graph,Java,Algorithm,Graph,我试图解决Leetcode的算法问题;被称为” 我尝试的是使用2种颜色(已访问,尚未访问),然后递归调用一个helper函数来增加高度。但我几乎在评论的最后一步被卡住了。我想不出一个方法来指定在什么情况下我应该检查高度 下面是我的代码。如果有人能帮我,我很感激。 多谢各位 类解决方案{ 枚举颜色{ 白色、灰色; } 公共列表findMinHeightTrees(int n,int[][]边){ int minHeight=Integer.MAX_值; List adjLists=构建图(n,边)

我试图解决Leetcode的算法问题;被称为”

我尝试的是使用2种颜色(已访问,尚未访问),然后递归调用一个helper函数来增加高度。但我几乎在评论的最后一步被卡住了。我想不出一个方法来指定在什么情况下我应该检查高度

下面是我的代码。如果有人能帮我,我很感激。 多谢各位

类解决方案{
枚举颜色{
白色、灰色;
}
公共列表findMinHeightTrees(int n,int[][]边){
int minHeight=Integer.MAX_值;
List adjLists=构建图(n,边);
List ret=new ArrayList();
颜色[]已访问=新颜色[n];
数组。填充(已访问,颜色。白色);
对于(int i=0;i
找到最小高度树就是找到树的中心(由一个或两个顶点组成)

一个可能的实现(从)是在每一步删除“叶子”

希望在最后,只有中间偏左

下面是js中的一个示例

//https://www.tutorialspoint.com/centers-of-a-tree
函数buildAdjencyList(边){
返回边。减少((dic,[from,to])=>{
dic.set(from,(dic.get(from)| | new set()).add(to))
dic.set(到,(dic.get(到)| |新集合()).add(从))
返回dic
},新映射())
}
函数简化(G){
常数Verticestodelet=[]
for(设G的[k,v]{
如果(v.size==1){
G.删除(k)
垂直推力(k)
}
}
for(设G的[k,v]{
verticesToDelete.forEach(del=>{
如果(v.has(del)){
v、 删除(del)
}
})
}
}
函数转储(G){
for(设G的[k,v]{
log(k'->',JSON.stringify([…v]))
}
}
函数运行(边){
常数G=构建调整列表(边)
while(true){
常量键=[…G.keys()]
简化(G)
//双中心树
如果(G.size==0){
返回键
}
//控制中心树
如果(G.size==1){
返回[…G.keys()]
}
console.log('iter'))
倾倒区(G)
}
}
log('bicentral',run([[0,1],[1,2],[3,2],[2,4],[2,5],[5,6],[6,7]]))

console.log('central',run([[0,1],[1,2]])
我不明白您的目标是什么,但我认为您的计算高度的方法是错误的。似乎对于每个顶点(findMinHeightTree),您都要计算其关联的长度,并且希望为已经计算的节点重用一些缓存。但是,不能有循环,因此对于当前顶点,如果最小高度树通过当前顶点,则该树无效,不予以考虑。一种可能性是考虑一个形容词矩阵和幂,直到(对于每行i)出现一条零线,这意味着行I的最长路径已经到达DeaDeDIT:忽视我的方法与形容词矩阵。对于边为[0,1],[1,3]的第二个示例,长度为2的路径为[0,3,1],但长度为3的路径为[0,3,1,3],这无效,但通过邻接矩阵考虑。标准的方法似乎(根据定义)考虑,我可以怀疑,因为Floyd Warshall是不定向的(如果它被引导,我们有一个DAG,我们可以拿负权重,但我看不到),那么在树上应用它的可能性。