Código:
#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;
}