Professional Documents
Culture Documents
1 ARBOLES BINARIOS
Definición:
El Árbol Binario contiene un Nodo Raíz y los dos que parten de él, llamados Nodo Izquierdo y Nodo
Derecho.
Pre-Orden
In-Orden
Post-Orden
Pre-Orden
Definición:
El Recorrido “Pre-Orden” lo recorre de la siguiente manera, viaje a través del Árbol Binario
desplegando el Contenido en la Raíz, después viaje a través del Nodo Izquierdo y después a través del
Nodo Derecho.
Detalle:
Temp toma el Valor de la Raíz y compara si el Árbol tiene algún Elemento, de otra manera Desplegara
“Árbol Vació…” y terminara el método. Si el Árbol tiene elementos dentro de él, lo recorrerá y viajara a
través de los Arreglos Izq y Der para determinar que valor meter en la Pila y en Temp para de esta
manera imprimir el siguiente Elemento correspondiente.
Algoritmo:
Temp → Raiz
Top →
Pila[Top] → Nulo
Imprimir Arbol[Temp]
Si Der[Temp] ≠ Nulo
Top → Top + 1
Pila[Top] → Der[Temp]
Si Izq[Temp] ≠ Nulo
Temp → Izq[Temp]
Si no:
Temp → Pila[Top];
Top → Top - 1
Salir
Diagrama:
In-Orden
Definición:
El Recorrido “In-Orden” lo recorre de la siguiente manera, viaje a través del Árbol Binario desplegando
el Contenido en el Nodo Izquierdo después la Raíz y finalmente viaja a través del Nodo Derecho.
Detalle:
Algoritmo:
Temp → Raiz
Top →
Pila[Top] → Nulo
Si Raiz = Nulo
Etiqueta:
Top → Top + 1
Pila[Top] → Temp
Temp → Izq[Temp]
Temp → Pila[Top]
Top → Top - 1
Imprimir Arbol[Temp]
Si Der[Temp] ≠ Nulo
Temp → Der[Temp]
Ir a Etiqueta
Top → Top - 1
Salir
Diagrama:
Corrida:
Definición:
El Recorrido “In-Orden” lo recorre de la siguiente manera, viaje a través del Árbol Binario desplegando
el Contenido en el Nodo Izquierdo después el Nodo Derecho y finalmente viaja a través de la Raiz.
Detalle:
Temp toma el Valor de la Raíz y compara si el Árbol tiene algún Elemento, de otra manera Desplegara
“Árbol Vació…” y terminara el método. Si el Árbol tiene elementos dentro de él, lo recorrerá y viajara a
través de los Arreglos Izq y Der para determinar que valor meter en la Pila y en Temp para de esta
manera imprimir el siguiente Elemento correspondiente.
Algoritmo:
Temp → Raiz
Top →
Pila[Top] → Nulo
Si Raiz = Nulo
Etiqueta:
Top → Top + 1
Pila[Top] → Temp
Si Der[Temp] ≠ Nulo
Top → Top + 1
Pila[Top] → - (Der[Temp])
Temp → Izq[Temp]
Temp → Pila[Top]
Mientras Temp ≥ 0
Imprimir Arbol[Temp]
Si Arbol[Temp] = Info[Raiz]
Salir
Temp → Pila[Top]
Top → Top - 1
Si Temp < 0
Temp = -(Temp)
Ir a Etiqueta
Salir
Diagrama:
Búsqueda
Definición:
La Búsqueda es Similar a todas los Métodos anteriores de Búsqueda, simplemente efectúa un recorrido
comparando el Elemento que deseas encontrar contra cada uno de los Elementos en los Arreglos.
Detalle:
El Algoritmo de Búsqueda compara el Elemento a buscar con cada uno de los datos de nuestro Árbol,
compara si el Elemento con el Nodo Raíz, si no se encuentra en la Raíz… compara Elemento contra la
Algoritmo:
Si Raiz = Nulo
Pos → Nulo
Pad → Nulo
Salir
Si Elem = Arbol[Raiz]
Pos → Raiz
Pad → Nulo
Salir
Temp → Izq[Raiz]
Temp2 → Raiz
Si no:
Temp → Der[Raiz]
Temp2 → Raiz
Pos → Temp
Pad → Temp2
Salir
Temp2 → Temp
Temp → Izq[Temp]
Si no:
Temp2 → Temp
Temp → Der[Temp]
Pos → Nulo
Pad → Temp2
Salir
Diagrama:
#include <iostream.h>
class Arbol
private:
int Top,Pila[10];
int Info[10],Izq[10],Der[10],Raiz,Disp;
public:
Arbol()
int in[10]={0,0,0,0,0,0,0,0,0,0};
for(int i=0;i<10;i++)
Info[i]=0;
Izq[i]=i+1;
Der[i]=-999;
Pila[i]=0;
Top=0;
Disp=0;
Raiz=-999;
Izq[9]=-999;
void PreOrd(void)
int Temp=Raiz;
Top=0;
Pila[0]=-999;
if(Raiz==-999)
cout<<"Arbol Vacio..."<<endl;
return;
while(Temp!=-999)
cout<<Info[Temp]<<endl;
if(Der[Temp]!=-999)
Top++;
Pila[Top]=Der[Temp];
if(Izq[Temp]!=-999)
Temp=Izq[Temp];
else
Temp=Pila[Top];
Top--;
void InOrd(void)
int Temp=Raiz,
Top=0;
Pila[0]=-999;
cout<<"Arbol Vacio..."<<endl;
return;
Back:
while(Temp!=-999)
Top++;
Pila[Top]=Temp;
Temp=Izq[Temp];
Temp=Pila[Top];
Top--;
while(Temp!=-999)
cout<<Info[Temp]<<endl;
if(Der[Temp]!=-999)
Temp=Der[Temp];
goto Back;
Temp=Pila[Top];
Top--;
void PostOrd(void)
int Temp=Raiz;
Pila[0]=-999;
if(Raiz==-999)
cout<<"Arbol Vacio..."<<endl;
return;
Back1:
while(Temp!=-999)
Top++;
Pila[Top]=Temp;
if(Der[Temp]!=-999)
Top++;
Pila[Top]=-Der[Temp];
Temp=Izq[Temp];
Temp=Pila[Top];
Top--;
while(Temp>=0)
cout<<Info[Temp]<<endl;
if(Info[Temp]==Info[Raiz])
return;
Temp=Pila[Top];
Top--;
if(Temp<0)
Temp=-Temp;
goto Back1;
int Temp,Temp2;
if(Raiz==-999)
PosPad[0]=-999;
PosPad[1]=-999;
cout<<"Arbol Vacio..."<<endl;
return;
if(Elem==Info[Raiz])
PosPad[0]=Raiz;
PosPad[1]=-999;
cout<<"Elemento Encontrado..."<<endl;
return;
if(Elem<Info[Raiz])
Temp=Izq[Raiz];
Temp2=Raiz;
Temp=Der[Raiz];
Temp2=Raiz;
while(Temp!=-999)
if(Elem==Info[Temp])
cout<<"Elemento Encontrado..."<<endl;
PosPad[0]=Temp;
PosPad[1]=Temp2;
return;
if(Elem<Info[Temp])
Temp2=Temp;
Temp=Izq[Temp];
else
Temp2=Temp;
Temp=Der[Temp];
PosPad[0]=-999;
PosPad[1]=Temp2;
cout<<"Elemento no Encontrado..."<<endl;
int PosPad[2],Temp;
if(Disp!=-999)
Busqueda(PosPad,Elem);
clrscr();
if(PosPad[0]!=-999)
return;
Temp=Disp;
Disp=Izq[Disp];
Info[Temp]=Elem;
PosPad[0]=Temp;
Izq[Temp]=-999;
Der[Temp]=-999;
if(PosPad[1]==-999)
Raiz=Temp;
else if(Elem<Info[PosPad[1]])
Izq[PosPad[1]]=Temp;
else
Der[PosPad[1]]=Temp;
cout<<"Elemento Insertado..."<<endl;
return;
int PosPad[2];
Busqueda(PosPad,Elem);
clrscr();
if(PosPad[0]==-999)
return;
if(Der[PosPad[0]]!=-999&&Izq[PosPad[0]]!=-999)
CasoB(PosPad);
else
CasoA(PosPad);
Izq[PosPad[0]]=Disp;
Disp=PosPad[0];
int Temp;
if(Izq[PosPad[0]]==-999&&Der[PosPad[0]]==-999)
Temp=-999;
else if(Izq[PosPad[0]]!=-999)
Temp=Izq[PosPad[0]];
else
Temp=Der[PosPad[0]];
if(PosPad[1]!=-999)
if(PosPad[0]==Izq[PosPad[1]])
Izq[PosPad[1]]=Temp;
else
Der[PosPad[1]]=Temp;
else
Raiz=Temp;
int PosPad2[2],Temp=Der[PosPad[0]],Temp2=PosPad[0];
while(Izq[Temp]!=-999)
Temp2=Temp;
Temp=Izq[Temp];
PosPad2[0]=Temp;
PosPad2[1]=Temp2;
CasoA(PosPad2);
if(PosPad[1]!=-999)
if(PosPad[0]==Izq[PosPad[1]])
Izq[PosPad[1]]=PosPad2[0];
else
Der[PosPad[1]]=PosPad2[0];
else
Raiz=PosPad2[0];
Der[PosPad2[0]]=Der[PosPad[0]];
}tec;
main()
int PosPad[2],res,op=0;
while(op!=7)
clrscr();
gotoxy(1,1);
cin>>op;
gotoxy(1,10);
switch (op)
case 1:
tec.PreOrd();
break;
case 2:
tec.InOrd();
break;
case 3:
tec.PostOrd();
break;
case 4:
tec.Busqueda(PosPad,res);
break;
case 5:
cin>>res;
tec.InsOrd(res);
break;
case 6:
cin>>res;
tec.Eliminar(res);
break;
case 7:
cout<<"Salida...";
break;
default:
cout<<"Opcion Erronea"<<endl;
break;
getch();