Título: Error al imprimir un arbol en c++
Publicado por: Pluging en 19 Marzo 2017, 03:36 am
Estoy tratando de hacer un proyecto para una materia de la universidad, de imprimir un arbol binario, lo hice y tal, lo compilo y no manda error cuando lo ejecuto, corre la primera parte pero cuando llega a la parte de imprimir me dice process ended, process returned 255 0xff (ya no se que hacer) Si alguien puede ayudarme por favor #include<iostream> #include<string.h> #include<stdio.h> #include<stdlib.h> #include<ctype.h> //#include<conio.h>
using namespace std;
class empleado//Definicion de la clase empleado para su manejo como un TAD { char cedula[10]; char nombre[30]; char direccion[30]; char cargo[20]; int nota; public: empleado(){}; empleado(char*, char*, char*, char*, int); friend istream & operator >> (istream &, empleado &);//Definicion de la sobrecarga del operador de lectura (>>) friend ostream & operator << (ostream &, empleado &);//Definicion de la sobrecarga del operador de escritura (<<) int devuelve_nota();//Definicion de la funcion que devulve la nota };
empleado::empleado(char ci[], char nom[], char d[], char c[], int n)//Constructor por parametros de la clase empleado { strcpy(cedula, ci); strcpy(nombre,nom); strcpy(direccion,d); strcpy(cargo, c); nota=n; }
istream & operator >>(istream & lee, empleado & emp)//Sobrecaraga del operador (>>) para poder leer los datos en el nodo { cout<<"\nIngrese datos del empleado"<<endl; cout<<"Cedula"<<endl; lee>>emp.cedula; cout<<"Nombre y Apellido"<<endl; lee.ignore(); lee.getline(emp.nombre,30); cout<<"Direccion"<<endl; lee.ignore(); lee.getline(emp.direccion,30); cout<<"Cargo"<<endl; lee.ignore(); lee.getline(emp.cargo,20); cout<<"Nota"<<endl; lee>>emp.nota;
return lee; }
ostream & operator <<(ostream & escribe, empleado & emp)//Sobrecaraga del operador (<<) para poder escribir los datos en el nodo { escribe<<"\n\nEmpleado"<<endl; escribe<<emp.cedula<<endl; escribe<<emp.nombre<<endl; escribe<<emp.direccion<<endl; escribe<<emp.cargo<<endl; escribe<<emp.nota<<endl;
return escribe; }
int empleado::devuelve_nota()//Funcion que devuleve nota { int n=nota; return n; }
class nodo//Clase nodo del arbol que posee como informacion el TAD empleado y dos nodos, izquierdo y derecho { empleado datos; nodo *hizq; nodo *hder; public: nodo() { hizq=hder=NULL; } empleado regresa_datos(); void actualizar_datos(empleado); friend class arbol; };
empleado nodo::regresa_datos() { return datos; }
void nodo::actualizar_datos(empleado info) { datos=info; }
class arbol//Definicion de la clase arbol { nodo *padre; public: arbol() { padre=NULL; } nodo *regresa_padre(); //Definicion de la funcion que regresa la raiz del arbol void insertar(nodo *); void diez_mejores(nodo *); void cinco_peores(nodo *); void nuevo_arbol(nodo *); };
nodo *arbol::regresa_padre()//Funcion que regresa la raiz del arbol { return padre; }
void arbol::insertar(nodo *aux) { aux=new nodo;//Declaracon de un nuevo nodo char r;
cout<<"Ingrese la informacion del empleado"<<endl; cin>>aux->datos;
cout<<"Tiene empleado a la izquierda?(S/N)"<<endl; cin>>r;
if(tolower(r)=='s')//Primero carga la informacion del arbol a la izquiera { insertar(aux->hizq); aux->hizq=padre; }
cout<<"Tiene empleado a la derecha?(S/N)"<<endl; cin>>r;
if(tolower(r)=='s')//Carga la informacion del arbol a la derecha { insertar(aux->hder); aux->hder=padre; } }
void arbol::diez_mejores(nodo *aux)//Funcion que obtiene a los 10 empleados mejores { empleado emp; if(aux) { int n=emp.devuelve_nota(); if(n>=10) { cout<<"Lista de los 10 mejores empleados (obtenida por recorrido inOrden)"<<endl; diez_mejores(aux->hizq); cout<<aux->datos<<endl; diez_mejores(aux->hder); } } } int main() { arbol jerarquia; empleado emp; nodo *nod;
nod=jerarquia.regresa_padre(); jerarquia.insertar(nod); nod=jerarquia.regresa_padre();
emp=nod->regresa_datos();
jerarquia.diez_mejores(nod);
cin.get(); //getch(); return 0; }
|