// *************************************************** // // Programa que crea un árbol binario // // *************************************************** /* * Archivo: main.cpp * Autor : J. Miguel Guanira E. * * Creado el 25 de noviembre de 2011, 03:39 PM */ #include #include "Nodo.h" #include "arbol.h" int main(void) { Nodo *arbol=NULL; crear(arbol); mostrarEnOrden(arbol); eliminar(arbol); return (EXIT_SUCCESS); } /* * Archivo: Nodo.h * Autor: J. Miguel Guanira E. * * Created on 25 de noviembre de 2011, 03:39 PM */ #ifndef NODO_H #define NODO_H //Nodo de un árbol binario struct Nodo{ int codigo; char *nombre; Nodo *izquierda; Nodo *derecha; }; #endif /* NODO_H */ /* * Archivo: arbol.h * Autor: J. Miguel Guanira E. * * Created on 25 de noviembre de 2011, 03:41 PM */ #ifndef ARBOL_H #define ARBOL_H #include "Nodo.h" void crear(Nodo*&); void mostrarEnOrden(Nodo *); void eliminar(Nodo *); Nodo *leeRegistro(void); void insertar(Nodo *&, Nodo *); #endif /* ARBOL_H */ /* * Archivo: arbol.cpp * Autor: J. Miguel Guanira E. * * Created on 25 de noviembre de 2011, 03:41 PM */ #include #include #include "Nodo.h" #include "arbol.h" void crear(Nodo *&arbol){ Nodo *nuevo; while (1){ nuevo = leeRegistro(); if (nuevo==NULL) break; insertar(arbol, nuevo); } } void mostrarEnOrden(Nodo *arbol){ if (arbol) { mostrarEnOrden(arbol->izquierda); printf("%10d %-30s\n", arbol->codigo, arbol->nombre); mostrarEnOrden(arbol->derecha); } } void eliminar(Nodo *arbol){ if (arbol) { eliminar(arbol->izquierda); eliminar(arbol->derecha); delete arbol; } } Nodo *leeRegistro(void){ int cod; char nomb[60]; Nodo *dato; if (scanf("%d", &cod)==EOF) return NULL; while(getchar()!='\n'); dato = new Nodo; dato->codigo = cod; gets(nomb); dato->nombre = new char[strlen(nomb)+1]; strcpy(dato->nombre, nomb); dato->izquierda = NULL; dato->derecha = NULL; return dato; } void insertar(Nodo *&arbol, Nodo *nuevo){ Nodo *p=arbol, *ant = NULL; if (arbol == NULL) arbol = nuevo; else { while(p){ ant = p; if (p->codigo > nuevo->codigo) p = p->izquierda; else p = p->derecha; } if (ant->codigo > nuevo->codigo) ant->izquierda = nuevo; else ant->derecha = nuevo; } }