algorithm - tecnicas - cómo dibujar un árbol paso a paso
Dibujar árboles sin ninguna restricción en grados (2)
Citando el artículo "Dibujando árboles presentados" por Bill Mill, los pasos principales de un algoritmo de dibujo de árboles m-arios son los siguientes:
- Hacer un recorrido posterior al pedido del árbol
- Si el nodo es una hoja, déle una coordenada x de 0
- De lo contrario, para cada uno de sus hijos, coloque al niño lo más cerca posible de su hermano izquierdo
- Coloque el nodo padre a medio camino entre su extremo izquierdo y el extremo derecho
Sin embargo, los pasos anteriores tienen un problema: los subárboles a la izquierda hacen que el resto del árbol se empuje hacia la derecha y desequilibra. El artículo implementa el siguiente principio para resolver el problema:
Principio 6: los nodos secundarios de un nodo padre deben estar espaciados uniformemente.
Hay un enlace a la implementación de Python de estos pasos que se proporcionan en el artículo.
Estoy trabajando en la visualización de mi algoritmo distribuido que resuelve problemas en los árboles.
Tengo que dibujar un árbol enraizado que se da como una entrada.
Actualmente, sé cómo manejar el caso si cada nodo tiene como máximo 2 hijos. En esta situación, para cada nodo v
, dibujo v
como un círculo con coordenadas (x(v), x(y))
, donde:
x(v) := index of v in the inorder traversal
y(v) := distance from v to the root
Eso funciona bien (por supuesto, el ancho del árbol es bastante grande, pero eso no me molesta demasiado), pero solo para la mayoría de los árboles binarios.
Sugiera qué algoritmo debería usar para árboles generales. El único requisito que tengo es que el dibujo tenga que ser plano.
EDITAR:
the simpler algorithm is to implement, the better
Este es un documento bastante conocido (como en, me las arreglé para recordarlo) en dibujar árboles de cualquier grado.
Mucho más simple, una vieja publicación de blog mía que imprime un árbol en ASCII. Podrías adaptar ese enfoque si quieres algo rápido y sucio.