我目前正在开发一个程序,它接受一个字符串(名称)列表和一个在java中作为距离的双精度列表。我得到了一类关系:
public class Relationships {
private List<String> residents;
private Map<String, Map<String, Double>> distances;
public Relationships(List<String> residents, double[][] distances) {
this.residents = Collections.unmodifiableList(residents);
this.distances = new HashMap<>();
for(int x = 0; x < this.residents.size(); x += 1) {
Map<String, Double> toMap = new HashMap<>();
for(int y = 0; y < this.residents.size(); y += 1) {
toMap.put(this.residents.get(y), distances[x][y]);
}
this.distances.put(this.residents.get(x), toMap);
}
}
public List<String> residents() {
return residents;
}
public double distance(String rs, String re) {
return distances.get(rs).get(re);
}
}
此程序的目的是根据名称及其相应距离创建树。给出的第一个名字将是根,它将搜索距离他们最近的下一个人,并将他们作为他们的孩子。在该过程的下一步中,第一个人将再次查找其附近的名称,但新创建的子项还将查找与其接近的名称。如果根和新子节点之间的距离等于最新搜索,则将该名称作为其子节点继承的节点是按名称首先按字母顺序排列的节点,例如,如果John和Bob的距离与James相等,鲍勃将詹姆斯作为他在树上的下一个孩子。下面是如何设置列表的示例。
public static void main(String[] args) {
List<String> residents = Arrays.asList(
"James", "Bob", "Aaron", "King"
);
double[][] distances = {
{0.0, 4.5, 0.5, 5.0},
{2.5, 0.0, 2.5, 3.5},
{0.5, 3.5, 0.0, 3.0},
{1.0, 2.5, 1.0, 0.0}
};
Relationships rel = new Relationships(residents, distances);
由于这棵树不是二进制的,所以我不能使用左右孩子。如何使用这些输入创建树。此树的目的是在测试期间打印出遍历和输入将是未知的。这是我创建的用于存放树创建代码的方法。
public static RelationTree createModel(Relationships relmodel, String resident0) {
// create and return a RelationTree
return null;
}
提前感谢您的帮助!