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 ());
}