¿Alguien podría escribir un programa en C para mostrar un árbol de búsqueda binario en forma gráfica y explicarlo?

Está escribiendo un programa en C que irá a través de su árbol y obtendrá los valores de nodo, luego lo trazará en Graphviz en una tubería, como ya lo hice aquí con GNU-Plot:

¿Alguien podría escribir un programa en C que muestre un gráfico en forma gráfica?

No volveré a escribir esto, pero si tomas la tubería, pon tu algoritmo de árbol binario y mira el archivo Graphviz aquí: http://www.graphviz.org/Gallery/…

Deberías estar a medias.

Si desea un diagrama perfecto, le gustaría usar LaTeX como se hace en el ejemplo de árbol de recursión de clasificación de combinación en la página TikZ.

Obtiene una trama perfecta en PDF con eso con una resolución muy alta. Pero LaTeX es para imprimir resultados, no tanto para una visualización de pantalla rápida. Tienes que elegir cuidadosamente lo que necesitas, no puedo hacer eso por ti.

Más árboles para elegir: Ejemplos de TikZ incluyen: Árboles

Aquí, este código que escribí, para todas las operaciones (pero eliminación) en Binary Search Tree

y para mostrarlo gráficamente:

/ * Árbol de búsqueda binaria: para ingresar un árbol de búsqueda binaria, imprimir su recorrido en orden, preorden y posorden y mostrar el árbol
Gráficamente*/
#include
#include
int gety () // para obtener la coordenada y
{CONSOLE_SCREEN_BUFFER_INFO csbi;
int y;
if (GetConsoleScreenBufferInfo (GetStdHandle (STD_OUTPUT_HANDLE), y csbi))
{y = csbi.dwCursorPosition.Y;
}
volver y;
}

anular gotoxy (int x, int y) // para colocar el cursor en la ubicación deseada
{
MANGO estático h = NULL;
si (! h)
h = GetStdHandle (STD_OUTPUT_HANDLE);
COORD c = {x, y};
SetConsoleCursorPosition (h, c);
}
struct node // estructura para el nodo del árbol
{
int x;
struct node * left, * right;
};
struct node * insert (struct node * root, int data) // función para insertar los datos
{
struct node * ptr = (struct node *) malloc (sizeof (struct node));
if (ptr == NULL)
{
printf (“\ nOverflow! No se pueden agregar más nodos!”);
regreso;
}
ptr-> x = datos;
ptr-> right = NULL;
ptr-> left = NULL;
if (raíz == NULL)
{
raíz = ptr;
volver root;
}
más
{
if (datos> (raíz) -> x)
root-> right = insert ((root) -> right, data);
más
root-> left = insert ((root) -> left, data);
}
}
orden vacío (nodo de estructura * raíz) // recorrido transversal
{
if (root == NULL) return;
más
{
orden (raíz-> izquierda);
printf (“% d”, raíz-> x);
orden (raíz-> derecha);

}
}
pedido previo vacío (nodo de estructura * raíz) // recorrido previo al pedido
{
if (root == NULL) return;
más
{
printf (“% d”, raíz-> x);
preordenar (raíz-> izquierda);

preordenar (raíz-> derecha);

}
}
postorder vacío (nodo de estructura * raíz) // recorrido del postorder
{
if (root == NULL) return;
más
{
postorder (raíz-> izquierda);

postorder (raíz-> derecha);
printf (“% d”, raíz-> x);

}
}
int findheight (struct node * root) // para encontrar los bordes máximos de raíz a hoja
{
int hl = 0, hr = 0;
if (raíz == NULL)
{
regreso;
}
hl = findheight (raíz-> izquierda) +1;
hr = findheight (raíz-> derecha) +1;
si (hl> hr)
volver hl;
más
volver h;
}
plottree void (struct node * root, int h, int H, int mid, int Y // para trazar el árbol gráficamente
{
if (raíz == NULL)
regreso;
int x = medio, i;
int y = Y + 1 + (H * (H + 1)) / 2 – (h * (h + 1)) / 2;
gotoxi (x, y);
printf (“% d”, raíz-> x);
if (root-> right! = NULL)
{
para (i = 1; i <= (h-1); i ++)
{
gotoxi (medio + i, y + i);
printf (“\\”);
}
plottree (root-> right, h-1, H, mid + (h), Y);
}
if (raíz-> izquierda! = NULL)
{
para (i = 1; i <= (h-1); i ++)
{
gotoxi (mediados de i, y + i);
printf (“/”);
}
plottree (root-> left, h-1, H, mid- (h), Y);
}

}
int main ()
{
struct node * root = NULL;
int x, h;
char ch = ‘y’;
printf (“\ nIntroduzca el nodo raíz:”);
scanf (“% d”, & x);
struct node * ptr = (struct node *) malloc (sizeof (struct node));
ptr-> x = x;
ptr-> right = NULL;
ptr-> left = NULL;
raíz = ptr;

while (ch == ‘y’ || ch == ‘Y’)
{
printf (“\ nIntroduzca datos de nodo de árbol:”);
scanf (“% d”, & x);
insertar (raíz, x);
printf (“\ nIntroduzca más? (y / n)”);
fflush (stdin);
scanf (“% c”, & ch);
}
printf (“\ nLas estadísticas del árbol de búsqueda binario generado son:”);
printf (“\ nLa altura del árbol es:% d”, findheight (root) -1);
printf (“\ nPreversión transversal del árbol:”);
preordenar (raíz);
printf (“\ nInversión del árbol de pedidos:”);
orden (raíz);
printf (“\ nPosterior del árbol de pedido:”);
postorder (raíz);
printf (“\ n Diagrama gráfico del árbol:”);
h = altura de búsqueda (raíz);
plottree (raíz, h, h, h * (h + 1) / 2, gety ());
}

Suponiendo que los datos en cada nodo son enteros, es relativamente fácil hacerlo si lo imprime en forma horizontal. Aquí hay un ejemplo de una impresión que asume que cada entero ocupa 6 (+2) espacios:

101000
18613
13444
12056
9827
9011
54

Los pasos son:

  1. Imprime 8 espacios.
  2. Llame recursivamente a la rutina printTree para imprimir el subárbol correcto si existe:
    (de lo contrario, escriba “NULL”).
  3. Imprima los datos del nodo (en un campo de 8 caracteres de longitud).
  4. Imprime 8 espacios (nuevamente).
  5. Llame recursivamente a la rutina printTree para imprimir el subárbol izquierdo si existe:
    (de lo contrario, escriba “NULL”)

Puede buscar aquí para referencia -> C Cómo “dibujar” un árbol binario en la consola.

Si. Es posible.

More Interesting

¿Qué es mejor para eliminar números específicos de una matriz, Java o C ++?

Yoshua Bengio: ¿Puede el aprendizaje profundo encontrar un nuevo algoritmo de clasificación?

Cómo elegir un elemento único de una lista dentro de un bucle en R

Dado un gráfico de N vértices con m1 bordes unidireccionales y m2 bordes bidireccionales, ¿cómo podemos dirigir los bordes bidireccionales de modo que no tengamos ninguna caminata cerrada?

¿Alguien puede ayudarme a encontrar el máximo divisor común entre dos enteros en Java?

¿Cómo se usaron los algoritmos cuando no había computadoras?

Cómo saber cuándo usar .add o .put para agregar a una matriz en Java

¿Cómo funciona el algoritmo de recomendación de películas de Netflix?

¿Cuál es la diferencia entre binario, algoritmo y lenguaje de programación?

¿Qué calcula este algoritmo? ¿Cuál es su funcionamiento básico? ¿Cuántas veces se ejecuta la operación básica? ¿Cuál es la clase de eficiencia de este algoritmo?

Al modelar un autómata determinista de estado finito, ¿qué algoritmo de recorrido gráfico debe usarse?

¿Cuál es la complejidad del algoritmo de Horner si encontramos P (x) calculando cada término del polinomio desde cero?

¿Cuáles son los famosos algoritmos de Java para principiantes?

¿Cuál es la mejor manera de extrapolar una señal dispersa que proviene de un filtro de Kalman?

Quiero hacer mi doctorado en aprendizaje automático. ¿Cuál es el mejor libro de texto para obtener una base sólida en probabilidad y estadística?