Pregunta

Actualizar:
Encontré más un ejemplo de lo que estoy tratando de lograr: Gestión de datos jerárquicos en MySQL. Quiero hacer eso, pero en JavaScript porque estoy construyendo una aplicación que recibe comentarios que están en una estructura jerárquica, para ser más específicos reddit.com. Si tiene la extensión JSON Pretty en su navegador web Chrome, vaya a Reddit y haga clic en los comentarios de los hilos y luego agregue .json a la URL para ver qué estoy analizando.
Obtengo los datos de JSON bien, solo analiza los comentarios y agrega el HTML apropiado para mostrar que está anidado.
¿Ideas para soluciones?


PREGUNTA VISTA:
Estoy trabajando en un programa y he llegado a una parte que necesito descubrir la lógica antes de escribir el código. Estoy tomando datos que están en formato de árbol, pero con la posibilidad de varios niños para cada nodo principal y los únicos árboles en los que puedo encontrar datos en los árboles con pesas o árboles donde, como máximo, cada nodo tiene dos nodos infantiles. Así que estoy tratando de descubrir el algoritmo para evaluar cada nodo de un árbol como este:

startingParent[15] // [# of children]
    child1[0]
    child2[5]
       child2ch1[4]
       ...
       child2ch5[7]
    child3[32]
    ...
    child15[4]

Ahora, cuando trato de escribir cómo funcionaría mi algoritmo, termino escribiendo anidados para/mientras los bucles, pero termino escribiendo un bucle para cada nivel de la altura del árbol que para datos dinámicos y árboles de altura desconocida con un número desconocido de un número desconocido de Niños por nodo Esto no funciona. Sé que en algún momento aprendí a atravesar un árbol como este, pero me está escapando por completo en este momento. ¿Alguien sabe cómo se hace esto en términos de bucles?

¿Fue útil?

Solución

Si no va a usar la recursión, necesita una estructura de datos auxiliares. Una cola le dará un recorrido de amplitud primero, mientras que una pila le dará un recorrido de profundidad. De cualquier manera, se ve más o menos así:

structure <- new stack (or queue)
push root onto structure
while structure is not empty
  node <- pop top off of structure
  visit(node)
  for each child of node
     push child onto structure
loop

Referencias de Wikipedia

Otros consejos

Use recursión, no bucles.
Amplth Primera búsqueda
Primera búsqueda de profundidad
Esos deberían ayudarlo a comenzar con lo que está tratando de lograr

Solo usa recursión como

def travel(node):
    for child in node.childs:
        # Do something
        travel(child)

El código más simple para la mayoría del recorrido de los árboles suele ser recursivo. Para un árbol de múltiples vías como el suyo, generalmente es más fácil tener un bucle que mira cada puntero a un niño, y se llama a ese nodo como argumento, para todos los nodos infantiles.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top