*Recorrido en Pre-Orden:
1.Se visita la raz o padre
2.Se pasa a recorrer el subrbol izquierdo
3.Se pasa a recorrer el subrbol derecho
*Recorrifdo en In-Orden
1.Se pasa a recorrer el subrbol izquierdo
2.Se visita la raz o padre
3.Se pasa a recorrer el subrbol derecho
*Recorrido en Post-Orden
1.Se pasa a recorrer el subrbol izquierdo
2.Se pasa a recorrer el subrbol derecho
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
/* estructura autorreferenciada */
struct nodoArbol {
struct nodoArbol *Izq; /* apuntador al subrbol izquierdo */
int dato; /* valor del nodo */
struct nodoArbol *Der; /* apuntador al subrbol derecho */
}; /* fin de la estructura nodoArbol */
/* prototipos */
void insertaNodo(struct nodoArbol **ptrArbol, int valor );
void inOrden(struct nodoArbol *ptrArbol );
void preOrden(struct nodoArbol *ptrArbol );
void postOrden(struct nodoArbol *ptrArbol );
struct nodoArbol *Buscar(struct nodoArbol *ptrArbol,int valor);
void EliminacionPorFusion(struct nodoArbol **ptrArbol,int valor);
void EliminacionPorCopiado(struct nodoArbol **ptrArbol,int valor);
int main(){
int i,n;
int elemento; /* variable para almacenar valores al azar */
struct nodoArbol *ptrRaiz = NULL, *p=NULL; /* rbol inicialmente vaco */
for(;;){
printf("\n\tOPERACIONES PARA ARBOLES BINARIOS DE BUSQUEDA\n\n");
printf("\t\t\t MENU\n\n");
printf("\t\t1.Crear arbol con nodos al azar.\n");
printf("\t\t2.Recorrer el Arbol. \n");
printf("\t\t3.Buscar nodo.\n");
printf("\t\t4.Eliminacion por fusion\n");
printf("\t\t5.Eliminacion por copiado\n");
printf("\n\t >>Ingrese una opcion:");
scanf("%d",&n);
switch(n)
{
case 1:{/* inserta valores al azar entre 1 y 15 en el rbol */
srand( time( NULL ) );
printf("\n\n\tLos numeros colocados en el arbol son:\n" );
printf("\t ");
for ( i = 1; i <= 8; i++ ) {
elemento = rand() % 15;
printf( "%3d", elemento );
insertaNodo( &ptrRaiz, elemento );
}
getch();
system("cls");
break;
}
case 2:{/* recorrer el rbol*/
system("cls");
if(ptrRaiz!=NULL){
printf("\n\t\t RECORRIDO POR PROFUNDIDAD\n");
printf( "\n\n\tEl recorrido en preorden es:\n\t\t" );
preOrden( ptrRaiz );
printf( "\n\n\tEl recorrido inorden es:\n\t\t" );
inOrden( ptrRaiz );
printf( "\n\n\tEl recorrido en postorden es:\n\t\t" );
postOrden( ptrRaiz );
}
else
printf("\n\t\tEL ARBOL ESTA VACIO!!!");
getch();
system("cls");
break;
}
case 3:{/* Buscar */
printf("\t\tIngrese el valor del nodo a Buscar: ");
scanf("%d",&elemento);
p=Buscar(ptrRaiz,elemento);
if(p!=NULL)
printf("\n\tEl valor %d se encuentra en el arbol.\n\n",p->dato);
else
printf("\n\ttEl valor %d NO se encuentra en el arbol.\n\n");
getch();
system("cls");
break;
}
case 4:{/* Eliminacion por fusion */
printf("\n\t\tIngrese el valor del nodo a Eliminar: ");
scanf("%d",&elemento);
printf("\n\t\tEliminacion Por Fusion\n");
EliminacionPorFusion( &ptrRaiz,elemento);
getch();
system("cls");
break;
}
case 5:{/* Eliminacion por copiado */
printf("\n\t\tIngrese el valor del nodo a Eliminar: ");
scanf("%d",&elemento);
printf("\n\n\tEliminacion Por Copiado\n");
EliminacionPorCopiado( &ptrRaiz,elemento);
getch();
system("cls");
break;
}
}
}
return 0;
} /* fin de main */
else if ( valor > ( *ptrArbol )->dato ) // el dato a insertar es mayor que el dato en el
nodo actual
insertaNodo( &( ( *ptrArbol )->Der ), valor );