You are on page 1of 22

Leccion 5.

1 ARBOLES BINARIOS

Definición:

Un Árbol Binario es un conjunto de finito de Elementos, de nombre Nodos de forma que:

El Árbol Binario es Vació si no tiene ningún elemento en el.

El Árbol Binario contiene un Nodo Raíz y los dos que parten de él, llamados Nodo Izquierdo y Nodo
Derecho.

Los Árboles tiene 3 Recorridos Diferentes los cuales son:

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:

PreOrd(Arbol, Der, Izq, Pila, Raiz)

Temp → Raiz

Top →

Pila[Top] → Nulo

ESTRUCTURA DE DATOS – LECCION 5.1 ARBOLES BINARIOS Página 1


Si Raiz = Nulo

Imprimir “Árbol Vació…” y Salir

Repetir mientras Temp ≠ 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

Fin del ciclo

Salir

Diagrama:

ESTRUCTURA DE DATOS – LECCION 5.1 ARBOLES BINARIOS Página 2


Corrida:

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:

ESTRUCTURA DE DATOS – LECCION 5.1 ARBOLES BINARIOS Página 3


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:

PreOrd(Arbol, Der, Izq, Pila, Raiz)

Temp → Raiz

Top →

Pila[Top] → Nulo

Si Raiz = Nulo

Imprmir “Arbol Vacio…” y Salir

Etiqueta:

Mientras Temp ≠ Nulo

Top → Top + 1

Pila[Top] → Temp

Temp → Izq[Temp]

Fin del ciclo

Temp → Pila[Top]

Top → Top - 1

Mientras Temp ≠ Nulo

Imprimir Arbol[Temp]

Si Der[Temp] ≠ Nulo

Temp → Der[Temp]

Ir a Etiqueta

ESTRUCTURA DE DATOS – LECCION 5.1 ARBOLES BINARIOS Página 4


Temp → Pila[Top]

Top → Top - 1

Fin del ciclo

Salir

Diagrama:

Corrida:

ESTRUCTURA DE DATOS – LECCION 5.1 ARBOLES BINARIOS Página 5


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 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:

PostOrd(Arbol, Der, Izq, Pila, Raiz)

Temp → Raiz

Top →

Pila[Top] → Nulo

Si Raiz = Nulo

Imprimir “Arbol Vacio…” y Salir

Etiqueta:

Mientras Temp ≠ Nulo

Top → Top + 1

Pila[Top] → Temp

Si Der[Temp] ≠ Nulo

Top → Top + 1

Pila[Top] → - (Der[Temp])

Temp → Izq[Temp]

Temp → Pila[Top]

ESTRUCTURA DE DATOS – LECCION 5.1 ARBOLES BINARIOS Página 6


Top → Top - 1

Fin del ciclo

Mientras Temp ≥ 0

Imprimir Arbol[Temp]

Si Arbol[Temp] = Info[Raiz]

Salir

Temp → Pila[Top]

Top → Top - 1

Fin del ciclo

Si Temp < 0

Temp = -(Temp)

Ir a Etiqueta

Salir

Diagrama:

ESTRUCTURA DE DATOS – LECCION 5.1 ARBOLES BINARIOS Página 7


Corrida:

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

ESTRUCTURA DE DATOS – LECCION 5.1 ARBOLES BINARIOS Página 8


Raíz para empezar a viajar por el Árbol respectivamente, usa un método similar al anterior hasta
encontrar el Elemento. De otra forma la búsqueda es fallida.

Algoritmo:

Busqueda(Arbol, Der, Izq, Pila, Raiz, Elem)

Si Raiz = Nulo

Imprimir “Arbol Vacio”

Pos → Nulo

Pad → Nulo

Regresar Pos y Pad

Salir

Si Elem = Arbol[Raiz]

Imprimir “Elemento Encontrado”

Pos → Raiz

Pad → Nulo

Regresar Pos y Pad

Salir

Si Elem < Arbol[Raiz]

Temp → Izq[Raiz]

Temp2 → Raiz

Si no:

Temp → Der[Raiz]

Temp2 → Raiz

Mientras Temp ≠ Nulo

ESTRUCTURA DE DATOS – LECCION 5.1 ARBOLES BINARIOS Página 9


Si Elem = Arbol[Temp]

Imprimir “Elemento Encontrado…”

Pos → Temp

Pad → Temp2

Regresar Pos y Pad

Salir

Si Elem < Arbol[Temp]

Temp2 → Temp

Temp → Izq[Temp]

Si no:

Temp2 → Temp

Temp → Der[Temp]

Fin del ciclo

Imprimir “Elemento no Encontrado…”

Pos → Nulo

Pad → Temp2

Regresar Pos y Pad

Salir

Diagrama:

ESTRUCTURA DE DATOS – LECCION 5.1 ARBOLES BINARIOS Página 10


Corrida:

Programa click here:

ESTRUCTURA DE DATOS – LECCION 5.1 ARBOLES BINARIOS Página 11


#include <conio.h>

#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)

ESTRUCTURA DE DATOS – LECCION 5.1 ARBOLES BINARIOS Página 12


{

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;

ESTRUCTURA DE DATOS – LECCION 5.1 ARBOLES BINARIOS Página 13


if(Raiz==-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;

ESTRUCTURA DE DATOS – LECCION 5.1 ARBOLES BINARIOS Página 14


Top=0;

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--;

ESTRUCTURA DE DATOS – LECCION 5.1 ARBOLES BINARIOS Página 15


}

if(Temp<0)

Temp=-Temp;

goto Back1;

void Busqueda(int PosPad[2],int Elem)

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;

ESTRUCTURA DE DATOS – LECCION 5.1 ARBOLES BINARIOS Página 16


else

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;

ESTRUCTURA DE DATOS – LECCION 5.1 ARBOLES BINARIOS Página 17


}

void InsOrd(int Elem)

int PosPad[2],Temp;

if(Disp!=-999)

Busqueda(PosPad,Elem);

clrscr();

if(PosPad[0]!=-999)

cout<<"Elemento Existente... Imposible Insertar..."<<endl;

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;

cout<<"Arbol Lleno... Imposible Insertar..."<<endl;

ESTRUCTURA DE DATOS – LECCION 5.1 ARBOLES BINARIOS Página 18


}

void Eliminar(int Elem)

int PosPad[2];

Busqueda(PosPad,Elem);

clrscr();

if(PosPad[0]==-999)

cout<<"El Elemento no se Encuentra en el Arbol... Imposible Eliminar..."<<endl;

return;

if(Der[PosPad[0]]!=-999&&Izq[PosPad[0]]!=-999)

CasoB(PosPad);

else

CasoA(PosPad);

Izq[PosPad[0]]=Disp;

Disp=PosPad[0];

void CasoA(int PosPad[2])

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)

ESTRUCTURA DE DATOS – LECCION 5.1 ARBOLES BINARIOS Página 19


{

if(PosPad[0]==Izq[PosPad[1]])

Izq[PosPad[1]]=Temp;

else

Der[PosPad[1]]=Temp;

else

Raiz=Temp;

void CasoB(int PosPad[2])

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];

ESTRUCTURA DE DATOS – LECCION 5.1 ARBOLES BINARIOS Página 20


Izq[PosPad2[0]]=Izq[PosPad[0]];

Der[PosPad2[0]]=Der[PosPad[0]];

}tec;

main()

int PosPad[2],res,op=0;

while(op!=7)

clrscr();

cout<<"\n1) Pre-Orden\n2) In-Orden\n3) Post-Orden\n4) Busqueda\n5) Insercion\n6)


Eliminar\n7) Salir"<<endl;

gotoxy(1,1);

cout<<"Que deseas hacer?: ";

cin>>op;

gotoxy(1,10);

switch (op)

case 1:

tec.PreOrd();

break;

case 2:

tec.InOrd();

break;

case 3:

tec.PostOrd();

break;

case 4:

cout<<"Que Numero deseas buscar?"<<endl;

ESTRUCTURA DE DATOS – LECCION 5.1 ARBOLES BINARIOS Página 21


cin>>res;

tec.Busqueda(PosPad,res);

break;

case 5:

cout<<"Que Numero quieres Insertar?"<<endl;

cin>>res;

tec.InsOrd(res);

break;

case 6:

cout<<"Que Numero quieres Eliminar?"<<endl;

cin>>res;

tec.Eliminar(res);

break;

case 7:

cout<<"Salida...";

break;

default:

cout<<"Opcion Erronea"<<endl;

break;

getch();

ESTRUCTURA DE DATOS – LECCION 5.1 ARBOLES BINARIOS Página 22

You might also like