У меня есть структура данных, где узел может иметь несколько родителей.
У меня есть список узлов, которые я хочу вставить в дерево. Узел в списке содержит данные и дополнительный список его родителей.Рекурсивно заполнить древовидную структуру
Я хочу построить дерево из этого списка.
private class Treenode {
private List<Treenode> children;
private List<Treenode> parents;
public List<Treenode> getChildren() {
return children;
}
public List<Treenode> getParents() {
return parents;
}
private Info data;
public Info getData() {
return data;
}
public void setData(Info data) {
this.data = data;
}
public Treenode() {
children = new ArrayList<Treenode>();
parents = new ArrayList<Treenode>();
}
public Treenode(Info data) {
children = new ArrayList<Treenode>();
parents = new ArrayList<Treenode>();
this.data = data;
}
public boolean addChild(Treenode n) {
return children.add(n);
}
public boolean removeChild(Treenode n) {
return children.remove(n);
}
public boolean addParent(Treenode n) {
return parents.add(n);
}
public boolean removeParent(Treenode n) {
return parents.remove(n);
}
}
private void scanListAndAddToTree(final List list,Treenode parent){
for (Iterator iter = list.iterator(); iter.hasNext();) {
Info info = (Info) iter.next();
String [] parents = info.getParents();
if(parents==null){ //no parents
Treenode newNode = new Treenode(info);
parent.addChild(newNode);
scanTree(list,newNode);
} else
for (int i = 0; i < parents.length; i++) {
if (parents[i].getID.equals(parent.data.getID())){
Treenode newNode = new Treenode(info);
parent.addChild(newNode);
scanTree(list,newNode);
}
}
}
Но мой код не так :(
Рекурсия никогда не останавливается и повторно добавляет те же узлы
несколько родителей + несколько детей -> это не дерево, просто график. – Matten
что такое «неправильно», что это такое? Во-вторых, определение проблемы - это первый шаг в поиске решения –
, что означает «мой код неправильный»? С какой ошибкой вы столкнулись? Что должно произойти и что произойдет? Любые исключения? Возможно, вам следует наметить ожидаемый/фактический результат и попытаться понять, что происходит, что отличает и как его можно исправить. – Matten