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