Download Cap.14 - Árboles binarios y ordenados - Ejercicio 14.2
Transcript
Cap 14. Apartado 14.8, página 447-449 EJERCICIO 14.2 Con los registros de estudiantes formar un árbol binario de búsqueda, ordenado respecto al campo clave número de matrícula. El programa debe de tener las opciones de mostrar los registros ordenados y eliminar un registro dando el número de matrícula. Cada registro tiene sólo dos campos de información: nombre y nummat .Además los campos de enlace con el subárbol izquierdo y derecho. Las operaciones que se hace uso son insertar, eliminar, buscar y visualizar el árbol. Los algoritmos de las tres primeras operaciones ya están descritos anteriormente. La operación de visualizar consiste en recorrer en inorden el árbol, cada vez que se visita el nodo raíz se escriben los datos del estudiante. No se vuelve a escribir el código de las funciones, en las secciones previas pueden consultarse. Si se escribe visualizar() que es una aplicación de recorrer en inorden el árbol de búsqueda, este tipo de recorrido hace que se muestren por pantalla los registros. #include #include #include #include <stdio.h> <string.h> <stdlib.h> <conio.h> struct nodo { int nummat; char nombre[30]; struct nodo *izdo, *dcho; }; typedef struct nodo Nodo; Nodo* crearNodo(int id, char* n); Nodo* buscar (Nodo* p, int buscado); void insertar (Nodo** raiz, int matricula, char* nombre); void reemplazar(Nodo** act); void eliminar (Nodo** raiz, int matricula); void visualizar (Nodo* r); void main() { int nm; char nom[30]; Nodo* raiz = NULL; /* Crea el árbol */ do{ printf("Numero de matricula(0 -> Fin): "); scanf("%d%*c",&nm); if (nm) { printf("Nombre: "); gets(nom); insertar(&raiz,nm,nom); } }while (nm); /* Opciones de escribir el árbol o borrar una registro */ clrscr(); do{ puts(" 1. Mostrar el árbol\n"); puts(" 2. Eliminar un registro\n"); puts(" 3. Salir\n "); do scanf("%d%*c", &nm); while(nm<1 || nm>3); if (nm == 1) { printf("\n\t Registros ordenados por número de matrícula\n"); visualizar(raiz); } else if (nm == 2){ int cl; printf("Clave: "); scanf("%d",&cl); eliminar(&raiz,cl); } }while (nm != 3); } void visualizar (Nodo* r) { if (r) { visualizar(r -> izdo); printf("Matricula %d \t %s \n",r->nummat,r->nombre); visualizar(r -> dcho); } }