// CREA UN ARBOL Y REALIZA SUS 3 RECORRIDOS #include <stdio.h> #include <stdlib.h> struct Nodo { int Dato; struct Nodo *Raiz; struct Nodo *Izq; struct Nodo *Der; }; struct Nodo *Raiz = NULL; void Recorre_PREORDEN(struct Nodo *ARBOL) { printf("%d ", ARBOL->Dato); if (ARBOL->Izq != NULL) Recorre_PREORDEN(ARBOL->Izq); if (ARBOL->Der != NULL) Recorre_PREORDEN(ARBOL->Der); } void Recorre_POSORDEN(struct Nodo *ARBOL) { if (ARBOL->Izq != NULL) Recorre_POSORDEN(ARBOL->Izq); if (ARBOL->Der != NULL) Recorre_POSORDEN(ARBOL->Der); printf("%d ", ARBOL->Dato); } void Recorre_ENTREORDEN(struct Nodo *ARBOL) { if (ARBOL->Izq != NULL) Recorre_ENTREORDEN(ARBOL->Izq); printf("%d ", ARBOL->Dato); if (ARBOL->Der != NULL) Recorre_ENTREORDEN(ARBOL->Der); } void Almacena(struct Nodo *ARBOL, struct Nodo *Nuevo) { if (Raiz == NULL) { Raiz = Nuevo; return; } if (Nuevo->Dato > ARBOL->Dato) { if (ARBOL->Der == NULL) { ARBOL->Der = Nuevo; Nuevo->Raiz = ARBOL; return; } else Almacena(ARBOL->Der, Nuevo); } else // ARBOL IZQUIERDO { if (ARBOL->Izq == NULL) { ARBOL->Izq = Nuevo; Nuevo->Raiz = ARBOL; return; } else Almacena(ARBOL->Izq, Nuevo); } } struct Nodo *Crea_Nodo(int Dato) { struct Nodo *Nuevo = (struct Nodo *)malloc(sizeof(struct Nodo)); Nuevo->Raiz = Nuevo->Der = Nuevo->Izq = NULL; Nuevo->Dato = Dato; return Nuevo; } void Pide_Datos() { int Dato; // Cualquier dato do { printf("Introduce un dato: "); scanf("%d", &Dato); if (Dato) Almacena(Raiz, Crea_Nodo(Dato)); } while (Dato); } int main() { Pide_Datos(); printf("PRE-ORDEN: "); Recorre_PREORDEN(Raiz); printf("\n"); printf("ENTRE-ORDEN: "); Recorre_ENTREORDEN(Raiz); printf("\n"); printf("POS-ORDEN: "); Recorre_POSORDEN(Raiz); printf("\n"); }