Dev - C++ - Error al imprimir un arbol en c++

   
Vista:

Error al imprimir un arbol en c++

Publicado por Pluging (1 intervención) el 19/03/2017 04:10:39
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
#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;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Revisar política de publicidad