Error al imprimir un arbol en c++

Iniciado por Pluging, 19 Marzo 2017, 03:36 AM

0 Miembros y 1 Visitante están viendo este tema.

Pluging

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