Documentos de Académico
Documentos de Profesional
Documentos de Cultura
2
Cuando hablamos de recorrer, básicamente nos referimos a visitar
cada nodo, elemento o número del árbol, de tal manera que se visite cada
uno de sus elementos una vez y, si se quiere, mostrarlo. En caso de los
arboles binarios, se puede distinguir tres tipos de recorrido, estos son:
INORDEN
POSTORDEN
PREORDEN
3
Siguiendo la manera de recorrer un árbol en pre orden, si iniciaría por
la raíz, que es 5, seguiríamos por el 4 y luego el 3, una vez recorrida la parte
izquierda, pasaríamos a la derecha, y se mostrarían primero el 6 y luego el 7,
en resumen, el programa mostrara lo siguiente:
5, 4, 3, 6, 7.
Entonces:
4
5
3. Elaborar un programa que muestre un menú, las diversas
operaciones que se pueden realizar con árboles. Debe mostrar el
código editable y hacer capture de las posibles ejecuciones, insertando
datos. Valor 10 ptos
CAPTURAS:
1. AGREGAR:
6
7
2. BUSCAR
8
En caso de que no este:
3. RECORRIDO
(Se usara el árbol previamente mostrado)
Pre
9
In
Post
10
4. ELIMINAR
11
5. MOSTRAR
12
6. SALIR
CODIGO EDITABLE:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
// Estructura de Datos 20% 3er Corte Jose Leonardo Vasquez
struct nodo{
int dato;
nodo *der;
nodo *izq;
nodo *padre;
};
13
// Funciones
void menu();
nodo *crearNodo(int, nodo *);
nodo *arbol = NULL;
void insertarNodo(nodo *&, int, nodo *);
void mostrarArbol(nodo *, int);
void preRecorrido(nodo *);
void inRecorrido(nodo *);
void postRecorrido(nodo*);
void eliminarArbol(nodo *, int);
bool buscarArbol(nodo *, int);
void eliminarNumero(nodo*);
nodo *minima(nodo *);
void reemplazo(nodo *, nodo *);
void suprimirNodo(nodo *);
int main(){
menu();
getch();
return 0;
}
14
printf ("1. AGREGAR\n");
printf ("2. BUSCAR\n");
printf ("3. RECORRIDO \n");
printf ("4. ELIMINAR\n");
printf ("5. MOSTRAR\n");
printf ("6. SALIR\n");
scanf("%d", &menu);
switch(menu){
case 1 :
printf ("\nIntroduzca un numero \n");
scanf("%d", &dato);
insertarNodo(arbol,dato, NULL);
system("pause");
break;
case 2:
printf("Ingresa el numero a buscar: \n");
scanf("%d", &dato);
if (buscarArbol(arbol,dato) == true){
printf("Se ha encontrado el numero: %d
en el arbol\n", dato);
}
else{
printf ("Numero no encontrado\n");
}
system ("pause");
break;
15
case 3:
printf ("Que tipo de recorrido quiere hacer?\
n");
printf("Ingrese 1 para PRE orden\n");
printf("Ingrese 2 para IN orden\n");
printf("Ingrese 3 para POST orden\n");
scanf("%d", &rc);
if (rc==1){
printf("Recorrido en pre orden: \n");
preRecorrido(arbol);
system("pause");
}
else if(rc==2){
printf("Recorrido en in orden: \n");
inRecorrido(arbol);
system("pause");
}
else if(rc==3){
printf("Recorrido Post orden: \n");
postRecorrido(arbol);
system("pause");
}
else{
printf("Numero errado, intente de
nuevo");
system("pause");
}
break;
16
case 4 :
printf ("Cual numero desea eliminar\n");
scanf("%d", &dato);
eliminarArbol(arbol,dato);
system("pause");
break;
case 5:
printf ("Mostrar elemento de la cola\n");
mostrarArbol(arbol,cont);
system("pause");
break;
case 6 :
printf("Ha salido del programa\n");
system("pause");
break;
}
system("cls");
}
while (menu != 6);
}
nuevo_nodo ->dato = n;
17
nuevo_nodo->der = NULL;
nuevo_nodo->izq = NULL;
nuevo_nodo->padre = padre;
}
// Mostrar Arbol
18
mostrarArbol(arbol->der, contador+1);
for (int i=0; i<contador;i++){
printf (" ");
}
printf ("%d\n", arbol->dato);
mostrarArbol(arbol->izq, contador+1);
}
}
19
eliminarArbol(arbol->izq, n);
}
else if (n >arbol->dato){
eliminarArbol(arbol->der,n);
}
else{
eliminarNumero(arbol);
}
}
20
// Eliminar nodo
void suprimirNodo(nodo *nodo){
nodo->izq=NULL;
nodo->der=NULL;
delete nodo;
}
// Reemplazar nodo
void reemplazo(nodo *arbol, nodo *nuevoNodo){
if (arbol->padre){
if (arbol->dato == arbol->padre->izq->dato){
arbol->padre->izq = nuevoNodo;
}
else if (arbol->dato == arbol->padre->der->dato){
arbol->padre->der = nuevoNodo;
}
}
if (nuevoNodo){
nuevoNodo->padre=arbol->padre;
}
}
21
else{
printf (" %d, ", arbol->dato);
preRecorrido(arbol->izq);
preRecorrido(arbol->der);
}
}
//Recorrido IN de un arbol
22
}
}
//Buscar en el arbol
23