Tengo varias listas:Traverse cada camino único (desde la raíz hasta las hojas) en una estructura de árbol arbitraria
A = ["a0", "a1"] // the number of lists varies
B = ["b0", "b1", "b2"] // such as the number of elements in a list.
C = ["c1"]
D = ["d0", "d1"]
puedo convertir esta estructura en un árbol:
_____ROOT______
/ \
___a0____ ____a1____
/ | \ / | \
b0 b1 b2 b0 b1 b2
| | | | | |
c1 c1 c1 c1 c1 c1
/| /| /| /| /| /|
d0 d1 d0 d1 d0 d1 d0 d1 d0 d1 d0 d1
estoy imprimiendo cada camino único en el árbol (omitiendo la raíz):
a0 -> b0 -> c1 -> d0
a0 -> b0 -> c1 -> d1
a0 -> b1 -> c1 -> d0
...
a1 -> b2 -> c1 -> d1
que estoy haciendo esto por "destruir" el árbol en sí, mientras que lo atraviesa i n de la siguiente manera:
public static void delete(Node node) {
if (node.isLeaf() && !node.isRoot()) {
Node parent = node.getParent();
parent.removeChild(node);
delete(parent);
}
}
public static void traverse(Node node) {
if (node.isRoot())
System.out.println("---");
else
System.out.println(node.getName());
if (node.isLeaf()) { // I'm still working on
if (!node.isRoot()) { // removing unnecessary checks
delete(node);
traverse(node.getRoot());
}
} else {
Node child = node.firstChild();
if (null != child)
traverse(child);
}
}
traverse(Node)
siempre imprime la primera ruta disponible del árbol (de la raíz a la hoja), mientras que delete(Node)
cortes hojas del árbol que ya es visitada por traverse(Node)
.
Esto funciona como estaba previsto, pero estoy dispuesto a encontrar una solución para atravesar el árbol de la manera descrita anteriormente sin destruirlo. Si hay una manera de hacerlo, me interesaría atravesar esta misma estructura, pero en forma de gráfico para reducir la redundancia.
¡Simple y funciona, gracias! –
¿cómo puedes hacer esto con javascript? –
Pequeño código agregado para hacer que la función devuelva todas las rutas. Gracias de todos modos. :) –