Eso viene en el .txt
100
Alejandro Piza
100
50
Bofo Bautista
150
200
Pavel Pardo
100
1
Teresa de Calcuta
500
500
George Clooney
200
8
Rafael Marquez
300
82
Vicente Fox
50
77
El codigo:
Código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Nodo{
int clave;
char nombre[100];
int sueldo;
struct Nodo *izquierdo,*derecho;
};
typedef struct Nodo NodoArbol;
NodoArbol* InsertarNodo(NodoArbol*,int,char[],int);
void EnOrden(NodoArbol*);
void BuscarNodo(NodoArbol*,int);
void EliminarNodo(NodoArbol**, int);
void Reemplazar(NodoArbol**, NodoArbol**);
int CaminoNodo(NodoArbol*,int);
int main(void)
{
int menu, clave = 0, x = 0, sueldo = 0;
char nombre[100];
NodoArbol *Raiz;
FILE *miArchivo;
Raiz = NULL;
while(true)
{
printf("1.Insertar Empleado\n2.En Orden\n3.Buscar Empleado\n4.Despedir Empleado\n5.Funcion Examen\n6.Salir\nOpcion: ");
scanf("%d",&menu);
switch(menu)
{
case 1:
miArchivo = fopen("BDarbol.txt", "r");
if(miArchivo == NULL)
{
printf("No se pudo encontrar el archivo");
system("PAUSE");
exit(0);
}
while(!feof(miArchivo))
{
fscanf(miArchivo, "%i\n", &clave);
fgets(nombre, 100, miArchivo);
x = strlen(nombre);
nombre[x-1] = '\0';
fscanf(miArchivo, "%i\n", &sueldo);
Raiz = InsertarNodo(Raiz,clave,nombre,sueldo);
}
fclose(miArchivo);
printf("Se introdujo con exito a los empleados en el arbol\n\n");
break;
case 2:
EnOrden(Raiz);
break;
case 3:
printf("Introduzca la clave del empleado que desea consultar: ");
scanf("%d",&clave);
BuscarNodo(Raiz,clave);
break;
case 4:
printf("Introduzca la clave del empleado que desea despedir: ");
scanf("%d",&clave);
EliminarNodo(&Raiz,clave);
break;
case 5:
printf("Introduce la clave del Empleado para Funcion Examen: ");
scanf("%d",&clave);
printf("El camino y el Salario son:\n",CaminoNodo(Raiz,clave));
break;
case 6:
exit(0);
break;
}
}
}
NodoArbol* InsertarNodo(NodoArbol *Raiz, int clave, char *nombre, int sueldo)
{
if(Raiz == NULL)
{
Raiz = new NodoArbol;
Raiz->izquierdo = Raiz->derecho = NULL;
Raiz->clave = clave;
strcpy(Raiz->nombre, nombre);
Raiz->sueldo = sueldo;
}
else if(clave < Raiz->clave)
Raiz->izquierdo = InsertarNodo(Raiz->izquierdo, clave, nombre, sueldo);
else
Raiz->derecho = InsertarNodo(Raiz->derecho, clave, nombre, sueldo);
return(Raiz);
}
void EnOrden(NodoArbol *Raiz)
{
if(Raiz != NULL)
{
EnOrden(Raiz->izquierdo);
printf("\t%d\t%d\t%s\n",Raiz->clave, Raiz->sueldo, Raiz->nombre);
EnOrden(Raiz->derecho);
}
}
void BuscarNodo(NodoArbol *Raiz, int valor)
{
if(Raiz->clave == valor)
printf("\t%d\t%d\t%s\n",Raiz->clave, Raiz->sueldo, Raiz->nombre);
if(valor > Raiz->clave)
{
if(Raiz->derecho == NULL)
printf("No lo encontre D:\n\n");
else
BuscarNodo(Raiz->derecho,valor);
}
if(valor < Raiz->clave)
{
if(Raiz->izquierdo == NULL)
printf("No lo encontre D:\n\n");
else
BuscarNodo(Raiz->izquierdo,valor);
}
}
void EliminarNodo(NodoArbol **Arbol, int valor)
{
NodoArbol *Aux;
if (*Arbol == NULL)
return;
if((*Arbol)->clave < valor)
EliminarNodo(&(*Arbol)->derecho, valor);
else if ((*Arbol)->clave > valor)
EliminarNodo(&(*Arbol)->izquierdo, valor);
else if ((*Arbol)->clave == valor)
{
Aux = *Arbol;
if((*Arbol)->izquierdo == NULL)
*Arbol=(*Arbol)->derecho;
else if ((*Arbol)->derecho == NULL)
*Arbol=(*Arbol)->izquierdo;
else
Reemplazar(&(*Arbol)->izquierdo, &Aux);
free(Aux);
}
}
void Reemplazar(NodoArbol **Arbol, NodoArbol **Aux)
{
if((*Arbol)->derecho == NULL)
{
(*Aux)->clave = (*Arbol)->clave;
strcpy((*Aux)->nombre,(*Arbol)->nombre);
(*Aux)->sueldo = (*Arbol)->sueldo;
*Aux = *Arbol;
*Arbol = (*Arbol)->izquierdo;
}
else
Reemplazar(&(*Arbol)->derecho, Aux);
}

