爪哇树深度
下面是我的树节点类:
public class Generalization extends Class_object {
private List<Generalization> superClasses;
private List<Generalization> subClasses;
public boolean isRoot() {
return superClasses.size() == 0;
}
public boolean isLeaf() {
return subClasses.size() == 0;
}
// path length to root
public String getDIT() {
return Integer.toString(recuDIT(this));
}
public int recuDIT(Generalization g) {
if (g.isRoot())
return 0;
else {
int maxLength = 0;
for (Generalization gen : superClasses) {
maxLength = Math.max(maxLength, recuDIT(gen));
}
return maxLength + 1;
}
}
// path length to leaf
public String getCLD() {
return Integer.toString(recuCLD(this));
}
public int recuCLD(Generalization g) {
if (g.isLeaf())
return 0;
else {
int maxLength = 0;
for (Generalization gen : subClasses) {
maxLength = Math.max(maxLength, recuCLD(gen));
}
return maxLength + 1;
}
}
}
每个节点都有其父节点和子节点。但当我执行程序时,它会在递归函数(CLD和DIT)中给我堆栈溢出错误。 谁能告诉我为什么它们会无限循环? 谢谢
# 1 楼答案
不知道我是否正确设置了树,或者是否真的进行了那么多测试,这对我来说很有用。主要问题是在方法中使用了类RecEdit/CLD,而不是泛化对象g。所以你一直在递归地遍历同一个列表,而没有从第一个索引开始。我还将for-each循环更改为for-loop,因为它更容易查看和调试
除此之外,我认为根的长度和叶的长度是3