У меня есть структура данных, которая выглядит следующим образом
private String name;
private ArrayList<Node> children;
private String parent="";
public Node(String name) {
setName(name);
children = new ArrayList<Node>();
}
В других местах моей программы у меня есть узел с именем root, который содержит всю структуру данных дерева.
Концептуально это выглядит так
root
/ \
/ \
node1 node2
/ \
/ \
node2 node3
/
/
node3
Как видите, узлы могут иметь одинаковые имена. Это предназначено. Я хочу создать строку для каждого узла, содержащего его собственное имя, плюс его происхождение, и сохранить их в векторе.
поэтому узел 3 на левой стороне будет "root|node1|node2|node3"
узел3 на правой стороне будет "root|node2|node3"
узел1 будет "root|node1"
и т. Д.
У меня есть способ перебрать структуру узла, чтобы напечатать каждый узел, но мне трудно установить каждого родителя, так как я не могу найти способ сделать это. Любая помощь была бы фантастической, поскольку все, что я пробовал до сих пор, провалилось. Одно важное замечание: дерево не обязательно может быть двоичным, я просто использую его для примера.
Вот код, который я использую для печати каждого узла дерева. Надеюсь, это будет легко настроить.
public void print() {
LinkedList<Node> open = new LinkedList<Node>();
LinkedList<Node> closed = new LinkedList<Node>();
open.add(this);
while(!open.isEmpty()) {
Node currentNode = open.removeFirst();
System.out.println(currentNode.getName());
ArrayList<Node> children = currentNode.getChildren();
closed.add(currentNode);
for(int i = 0; i < children.size(); i++) {
Node current = children.get(i);
open.addLast(current);
}
}
}
Спасибо, ребята.