Professional Documents
Culture Documents
ARBOLES
Nodo raz: nodo que no tiene padre. Este es el nodo que usaremos para
referirnos al rbol. En el ejemplo, ese nodo es el 'A'.
Nodo hoja: nodo que no tiene hijos. En el ejemplo hay varios: 'F', 'H',
'I', 'K', 'L', 'M', 'N' y 'O'.
Nodo rama: aunque esta definicin apenas la usaremos, estos son los
nodos que no pertenecen a ninguna de las dos categoras anteriores. En
el ejemplo: 'B', 'C', 'D', 'E', 'G' y 'J'.
Otra caracterstica que normalmente tendrn nuestros rboles es que todos los
nodos contengan el mismo nmero de punteros, es decir, usaremos la misma
estructura para todos los nodos del rbol. Esto hace que la estructura sea ms
sencilla, y por lo tanto tambin los programas para trabajar con ellos.
En una cosa, los rboles se parecen al resto de las estructuras que hemos visto:
dado un nodo cualquiera de la estructura, podemos considerarlo como una
ARBOLES
OPERACIONES EN ABB
El repertorio de operaciones que se pueden realizar sobre un ABB es parecido al
que realizbamos sobre otras estructuras de datos, ms alguna otra propia de
rboles:
Buscar un elemento.
Insertar un elemento.
ARBOLES
Borrar un elemento.
Movimientos a travs del rbol:
o Izquierda.
o Derecha.
o Raiz.
Informacin:
o Comprobar si un rbol est vaco.
o Calcular el nmero de nodos.
o Comprobar si el nodo es hoja.
o Calcular la altura de un nodo.
o Calcular la altura de un rbol.
BUSCAR UN ELEMENTO
Partiendo siempre del nodo raz, el modo de buscar un elemento se define de forma
recursiva.
el elemento no est en el
elemento que buscamos,
elemento que buscamos,
elemento que buscamos,
ARBOLES
}
else if(x<arbol->valor)inserta(arbol->izq,x);
else if(x>arbol->valor)inserta(arbol->der,x);
}
ARBOLES
8
5
9
6
7,3,1,5,6,8,9
Postorden:
1,6,5,3,9,8,7
ARBOLES
Ejemplo:
Programa que realice los recorridos en PreOrden, PostOrden, InOrden, busque un elemento, busque el
elemento mayor, el menor y la operacin de Talar y Podar en un rbol de bsqueda binaria
#include<iostream.h>
#include<conio.h>
struct nodo
{
int valor;
struct nodo* izq;
struct nodo* der;
};
typedef struct nodo* ABB;
void inserta(ABB&,int);
void preorden(ABB);
void postorden(ABB);
void enorden(ABB);
void verArbol(ABB,int);
bool Buscar(ABB,int);
int BuscarMayor(ABB);
int BuscarMenor(ABB);
void Podar(ABB&,int);
void main(void)
{
ABB arbol=NULL;
int n,x,opcion;
do
{
//----------MEN PRINCIPAL----------------------cout<<" +--------------------------+"<<endl;
cout<<" |
MENU PRINCIPAL
|"<<endl;
cout<<" +--------------------------+"<<endl;
cout<<" | 1 - Ingresar Elementos |"<<endl;
cout<<" +--------------------------+"<<endl;
cout<<" +--------RECORRIDOS--------+"<<endl;
cout<<" | 2 - Preorden
|"<<endl;
cout<<" | 3 - Postorden
|"<<endl;
cout<<" | 4 - En Orden
|"<<endl;
cout<<" +--------------------------+"<<endl;
cout<<" +--------------------------+"<<endl;
cout<<" | 5 - Visualizar Arbol
|"<<endl;
cout<<" +--------------------------+"<<endl;
cout<<" +--------BUSQUEDAS---------+"<<endl;
cout<<" | 6 - Buscar Elemento
|"<<endl;
cout<<" | 7 - Buscar Mayor
|"<<endl;
cout<<" | 8 - Buscar Menor
|"<<endl;
cout<<" +--------------------------+"<<endl;
cout<<" +-----------CORTES---------+"<<endl;
cout<<" | 9 - Podar
|"<<endl;
cout<<" | 10- Talar(Elim. Arbol) |"<<endl;
cout<<" +--------------------------+"<<endl;
cout<<" | 0 - SALIR
|"<<endl;
cout<<" +--------------------------+"<<endl;
cout<<" |Ingrese su Opcion: ";cin>>opcion;
cout<<" +--------------------------+"<<endl<<endl;
switch(opcion)
{
case 1:
{
cout<<"Ingrese cantidad de elemtos del arbol: ";
cin>>n;
for(int i=0;i<n; i++)
{
cout<<"Ingrese nodo numero "<<i<<": ";
cin>>x;
getch();
break;
ARBOLES
inserta(arbol,x);
}
}
case 2:
{
if(arbol!=NULL)
{
cout<<endl<<"Preorden : "; preorden(arbol);
}
else
{
cout<<" -->El arbol no tiene Elementos";
}
getch();
break;
}
case 3:
{
if(arbol!=NULL)
{
cout<<endl<<"Postorden : "; postorden(arbol);
}
else
{
cout<<" -->El arbol no tiene Elementos";
}
getch();
break;
}
case 4:
{
if(arbol!=NULL)
{
cout<<endl<<"En Orden : "; enorden(arbol);
}
else
{
cout<<" -->El arbol no tiene Elementos";
}
getch();
break;
}
case 5:
{
cout<<" VISUALIZACION DEL ARBOL "<<endl<<endl;
if(arbol!=NULL)
{
verArbol(arbol,0);
}
else
{
cout<<" -->El arbol no tiene Elementos";
}
getch();
break;
}
case 6:
{
int elem;
if(arbol!=NULL)
{
cout<<" -->Ingrese Elemento a buscar: ";
cin>>elem;
if (Buscar(arbol, elem))
cout<<" --> "<<elem<<" Encontrado ......";
else
cout<<" --> "<<elem<<" NO Encontrado ......";
ARBOLES
else
{
cout<<" -->El arbol no tiene Elementos";
}
getch();
break;
}
case 7:
{
if(arbol!=NULL)
{
cout<<" -->El Mayor Elemento es: "<<BuscarMayor(arbol);
}
else
{
cout<<" -->El arbol no tiene Elementos";
}
getch();
break;
}
case 8:
{
if(arbol!=NULL)
{
cout<<" -->El Mayor Elemento es: "<<BuscarMenor(arbol);
}
else
{
cout<<" -->El arbol no tiene Elementos";
}
getch();
break;
}
case 9:
{
int corte;
if(arbol!=NULL)
{
cout<<" -->Ingrese Elemento de Corte: ";
cin>>corte;
if (Buscar(arbol, corte))
{
if (arbol->valor == corte)
arbol = NULL;
else
Podar(arbol, corte);
cout<<" El Arbol fue podado con exito......";
}
else
cout<<" El Elemento noesta en el arbol.....";
}
else
{
cout<<" -->El arbol no tiene Elementos";
}
getch();
break;
}
case 10:
{
if(arbol!=NULL)
{
arbol=NULL;
cout<<" El Arbol fue Talado con exito......";
}
else
{
cout<<" -->El arbol no tiene Elementos";
}
getch();
break;
ARBOLES
}
}
clrscr();
}while(opcion!=0);
}
void inserta(ABB& arbol,int x)
{
if(arbol==NULL)
{
arbol=new(struct nodo);
arbol->valor=x;
arbol->izq=NULL;
arbol->der=NULL;
}
else
{
if(x<arbol->valor)
inserta(arbol->izq,x);
else
if(x>arbol->valor)
inserta(arbol->der,x);
}
}//SI ES IGUAL NO SE INSERTA --void preorden(ABB arbol)
{
if(arbol!=NULL)
{
cout<<arbol->valor<<" ";
preorden(arbol->izq);
preorden(arbol->der);
}
}
void enorden(ABB arbol)
{
if(arbol!=NULL)
{
enorden(arbol->izq);
cout<<arbol->valor<<" ";
enorden(arbol->der);
}
}
void postorden(ABB arbol)
{
if(arbol!=NULL)
{
postorden(arbol->izq);
postorden(arbol->der);
cout<<arbol->valor<<" ";
}
}
void verArbol(ABB arbol,int nro)
{
int i;
if(arbol==NULL)return;
verArbol(arbol->der,nro+1);
for(i=0;i<nro;i++)
cout<<" ";
cout<<arbol->valor<<endl;
verArbol(arbol->izq,nro+1);
}
bool Buscar(ABB arbol, int buscado)
{
ABB A1;
A1=arbol;
while (A1 != NULL)
}
return false;
10
ARBOLES