Sie sind auf Seite 1von 16

Facultad de contadura y

Administracin
Sistemas computacionales administrativos

Anlisis de Algoritmos
Dra. ALMA DELIA OTERO ESCOBAR

TEMA:
RBOLES

INTEGRANTES:
JIMNEZ GARCA CECILIA
JIMNEZ VALENCIA ALAN JESUS
BRIONES LIBREROS MICHELLE SEBASTIAN
HERNANDEZ HERNANDEZ ANA ISABEL
HERNANDEZ CALLEJAS GLORIA XIMENA
PERIODO ESCOLAR:

FEBRERO-JULIO 2017
NDICE
INTRODUCCIN .................................................................................................... 3
DESARROLLO DEL TEMA ..................................................................................... 4
RBOLES ............................................................................................................ 4
ARBOLES ENRAIZADOS .................................................................................... 5
SUBRBOL ......................................................................................................... 5
RBOL ORDENADO ........................................................................................... 6
ARBOLES ISOMORFOS ..................................................................................... 6
RBOL BINARIO ................................................................................................. 6
RECORRIDO DE RBOLES ............................................................................ 7
BSQUEDA...................................................................................................... 9
INSERCIN .................................................................................................... 10
BORRADO ...................................................................................................... 10
EJEMPLO DE ALGORITMO EN JAVA ................................................................. 11
CONCLUSIONES.................................................................................................. 16
BIBLIOGRAFIAS ................................................................................................... 16

Pgina 2 de 16
INTRODUCCIN
En el siguiente contenido abordaremos el tema de rboles los cuales nos sirve para
organizar datos y poder facilitar su manipulacin, una de las grandes ventajas que
tiene esta estructura es la bsqueda, ya que la informacin que entra se va
ordenando en el grafo.
Como definicin tenemos que un rbol es un grafo el cual est compuesto por
nodos, sin embargo, estos nodos solo pueden tener un mximo de dos hijos (hojas).
Veremos que la estructura de un rbol es no-lineal y este a su vez es recursivo.
Tambin veremos los tipos de rboles que existen, como lo son, isomorfos,
enraizados, binarios, los subrboles. Y cual es a forma para recorrerlos.

Pgina 3 de 16
DESARROLLO DEL TEMA
RBOLES
Villalpando y Garca (2013) sealan que Un rbol es cualquier grafo no dirigido
conexo que no contiene circuitos (p.242).

Figura 1. Grafos que son rboles

Para Villalpando y Garca (2014)


Ambos son grafos no dirigidos (es decir que sus
lados no contienen direccin alguna), son
conexos (esto es, entre cada par de vrtices
existe un camino que los conecta). Adems,
ninguno de los dos tiene circuitos (es decir, no
existe forma de dar un paseo partiendo de un
vrtice y regresar a este sin pasar dos veces por
el mismo lado); por tanto, se dice que son
rboles. (p.243) Figura 2. Grafos que no son rboles

Es necesario considerar una coleccin de rboles disjuntos, a la cual se le denomina


bosque. En los arboles se utilizan nombres especiales para identificar sus vrtices;
a saber, un vrtice de grado 1 en un rbol se le llama nodo hoja (u solo hoja) o nodo
terminal, y un vrtice de grado mayor que 1 recibe el nombre de nodo rama (o
simplemente rama) o nodo interno.(p.243)
En la figura 1 tenemos que en el rbol i) b, c, d, f, g, i, son nodos hoja, mientras que
a, e, h, son nodos rama.
A continuacin, se detallan algunas de las propiedades que distinguen a los rboles:
Existen un nico paseo entre dos vrtices cualesquiera en un rbol.
El nmero de vrtices es mayor que el nmero de aristas en un rbol.
Un rbol con dos o ms vrtices tiene al menos una hoja.

Pgina 4 de 16
ARBOLES ENRAIZADOS
Un rbol dirigido es un rbol enraizado si existe
exactamente un vrtice cuya valencia de entrada sea 0
y las valencias de entrada de los otros vrtices sea 1. El
vrtice con valencia de entrada 0 es llamado raz del
rbol enraizado. Los vrtices cuya valencia de salida es
cero se denomina hoja o nodo terminal, en tanto un
vrtice cuya valencia de salida es diferente de cero se
denomina rama o nodo rama o nodo interno.
En la figura 3 Los nodos a, b, c, f, h son nodos rama y
los nodos d, e, g, i, j, k, l son nodos hoja. Figura 3. rboles enraizados

Sea a un nodo rama en un rbol enraizado. Diremos que un vrtice b es un hijo de


a si existe una arista de a a b. Adems, se dice que el vrtice a es el padre de b.
Dos vrtices son hermanos si son hijos del mismo vrtice. Diremos que un vrtice c
es un descendiente de a si existe un paseo dirigido de a a c. Adems, se dice a es
un ancestro de c.

SUBRBOL
Sea a un nodo rama en un rbol T. Por el subrbol con
raz a entendemos el subgrafo T= (V, E) de T tal que V
contiene a a y a todas sus descendientes y E contiene las
aristas de todos los paseos dirigidos que surjan de a. Por
un subrbol de a entendemos un subrbol que tiene a a
como raz.

Figura 4. Subrboles

i), ii) y iii) son


subrboles de T cuyas
races son b, f y c
respectivamente.

Figura 5. Tipos de subarboles

Pgina 5 de 16
RBOL ORDENADO
Un rbol ordenado es un rbol enraizado con las
aristas incidentes de cada nodo rama, etiquetadas con
los enteros 1, 2, ..., i, ... por lo tanto, los subrboles de
un nodo rama pueden ser referidos como el primero,
el segundo, ..., y el i-simo subrboles del nodo rama
y corresponden a las aristas incidentes desde el nodo,
que pueden se enteros no consecutivos .
Figura 6. rbol ordenado

ARBOLES ISOMORFOS
Se dice que dos rboles ordenados son isomorfos
si existe una correspondencia uno a uno entre sus
vrtices y sus aristas, la cual conserva la relacin
de correspondencia, y si las etiquetas de las aristas
correspondientes coinciden. As los rboles
Figura 7. rboles isomorfos ordenados i) y ii) no son isomorfos.
Se definir el rbol con una clave de tipo entero (puede ser cualquier otra tipo de
datos) y dos hijos: izquierdo (izq) y derecho (der). Para representar los enlaces con
los hijos se utilizan punteros. El rbol vaco se representar con un puntero nulo
(Vaca, R, 2008, p.1).

Segn Vaca, R, 2008


Las ramas tienen un vrtice que se denomina Raz.

RBOL BINARIO
Un rbol binario puede declararse de la siguiente manera:

typedef struct tarbol


{
int clave;
struct tarbol *izq,*der;
} tarbol;

La altura de un nodo en un rbol es la longitud del camino ms largo que comienza


en el nodo y termina en una hoja.
Pgina 6 de 16
La altura de un nodo hoja es 0
La altura de un nodo es igual a la mayor altura de sus hijos + 1
La altura de un rbol se define como la altura de la raiz.
La altura de un rbol determina la eficiencia de la mayora de operaciones
definidas sobre rboles

Se define la profundidad de un nodo en un rbol como


la longitud del camino (nico) que comienza en la raz
y termina en el nodo. Tambin se denomina nivel.

La profundidad de la raz es 0
La profundidad de un nodo es igual a la
profundidad de su padre + 1 (p.5)

Figura 8. rbol binario

RECORRIDO DE RBOLES
Pre orden: Se pasa por la raz y luego se recorre en pre orden cada uno de los
subrboles.

Recursivo.
EJEMPLOS
a,b,c,e,f,g,d

Consiste en visitar el nodo actual (visitar puede ser simplemente mostrar la clave
del nodo por pantalla), y despus visitar el subrbol izquierdo y una vez visitado,
visitar el subrbol derecho. Es un proceso recursivo por naturaleza.
Si se hace el recorrido en preorden del rbol de la figura 1 las visitas seran en el
orden siguiente: a,b,d,c,e,f.

void preorden(tarbol *a)


{
if (a != NULL) {
visitar(a);
preorden(a->izq);
preorden(a->der); Figura 9. Recorrido de rboles

}
}
Pgina 7 de 16
Postorden: Se recorre en postorden cada uno de los subrboles y luego se pasa
por la raiz. Recursivo.
EJEMPLO
b,e,g,f,c,d,a
Se visitan primero el subrbol izquierdo, despus el subrbol derecho, y por ltimo
el nodo actual. En el ejemplo de la figura 1 el recorrido quedara as: d,b,e,f,c,a.

void postorden(arbol *a)


{
if (a != NULL) {
postorden(a->izq);
postorden(a->der);
visitar(a);
}
}

Inorden: Se recorre en inorden el primer subrbol (si existe). Se pasa por la raz y
por ltimo se recorre en inorden cada uno de los subrboles restantes. Tiene sentido
fundamentalmente en rboles binarios. Recursivo.
EJEMPLO
b,a,e,c,g,f,d
se visita el subrbol izquierdo, el nodo actual, y despus se visita el subrbol
derecho. En el ejemplo de la figura 1 las visitas seran en este orden: b,d,a,e,c,f.

void inorden(tarbol *a)


{
if (a != NULL) {
inorden(a->izq);
visitar(a);
inorden(a->der);
}
}

Por Niveles: Se etiquetan los nodos segn su profundidad (nivel). Se recorren


ordenados de menor a mayor nivel, a igualdad de nivel se recorren de izquierda a
derecha.
EJEMPLO

Pgina 8 de 16
a,b,c,d,e,f,g
Primero se visitan los nodos de nivel 1 (como mucho hay uno, la raz), despus los
nodos de nivel 2, as hasta que ya no queden ms.

void amplitud(tarbol *a)


{
tCola cola; /* las claves de la cola sern de tipo rbol binario */
arbol *aux;

if (a != NULL) {
CrearCola(cola);
encolar(cola, a);
while (!colavacia(cola)) {
desencolar(cola, aux);
visitar(aux);
if (aux->izq != NULL) encolar(cola, aux->izq);
if (aux->der != NULL) encolar(cola, aux->der);
}
}
}

No recursivo: Se introduce el raiz en una cola y se entra en un bucle en el que se


extrae de la cola un nodo, se recorre su elemento y se insertan sus hijos en la cola.
(P. 7)

OPERACIONES BSICAS SOBRE


RBOLES BINARIOS DE BSQUEDA
Bsqueda
Si el rbol no es de bsqueda, es necesario emplear uno de los recorridos anteriores
sobre el rbol para localizarlo. El resultado es idntico al de una bsqueda
secuencial. Aprovechando las propiedades del rbol de bsqueda se puede
acelerar la localizacin. Simplemente hay que descender a lo largo del rbol a
izquierda o derecha dependiendo del elemento que se busca.

boolean buscar(tarbol *a, int elem)


{
if (a == NULL) return FALSE;
else if (a->clave < elem) return buscar(a->der, elem);
else if (a->clave > elem) return buscar(a->izq, elem);
else return TRUE;
Pgina 9 de 16
}

Insercin
La insercin tampoco es complicada. Es ms, resulta prcticamente idntica a la
bsqueda. Cuando se llega a un rbol vaco se crea el nodo en el puntero que se
pasa como parmetro por referencia, de esta manera los nuevos enlaces
mantienen la coherencia. Si el elemento a insertar ya existe entonces no se hace
nada.

void insertar(tarbol **a, int elem)


{
if (*a == NULL) {
*a = (arbol *) malloc(sizeof(arbol));
(*a)->clave = elem;
(*a)->izq = (*a)->der = NULL;
}
else if ((*a)->clave < elem) insertar(&(*a)->der, elem);
else if ((*a)->clave > elem) insertar(&(*a)->izq, elem);
}

Borrado
La operacin de borrado si resulta ser algo ms complicada. Se recuerda que el
rbol debe seguir siendo de bsqueda tras el borrado. Pueden darse tres casos,
una vez encontrado el nodo a borrar:

1) El nodo no tiene descendientes. Simplemente se borra.


2) El nodo tiene al menos un descendiente por una sola rama. Se borra
dicho nodo, y su primer descendiente se asigna como hijo del padre del
nodo borrado (P. 10)

Pgina 10 de 16
EJEMPLO DE ALGORITMO EN
JAVA
package arboles;

import javax.swing.JOptionPane;

public class PruebaArbol


{
public static void main(String args [])

{
Arbol arbol = new Arbol();
int valor;
String Dato;

System.out.println("Insertando los siguientes valores: ");

Dato = JOptionPane.showInputDialog("Inserta el numero de nodos que desea ingresar");


int n = Integer.parseInt(Dato);

for(int i = 1; i <= n; i++ )


{
Dato = JOptionPane.showInputDialog("Dame el " + i + " valor para colocar en el Arbol");
valor = Integer.parseInt(Dato);
System.out.print(valor + " ");
arbol.insertarNodo(valor);
}

System.out.println("\n\nRecorrido Preorden");
arbol.recorridoPreorden();

System.out.println("\n\nRecorrido Inorden");
arbol.recorridoInorden();

System.out.println("\n\nRecorrido Postorden");
arbol.recorridoPosorden();

}
}
Pgina 11 de 16
public class NodoArbol{
//miembros de acceso
NodoArbol nodoizquierdo;
int datos;
NodoArbol nododerecho;

//iniciar dato y hacer de este nodo un nodo hoja


public NodoArbol(int datosNodo){
datos = datosNodo;
nodoizquierdo = nododerecho = null; //el nodo no tiene hijos
}

//buscar punto de insercion e inserter nodo nuevo


public synchronized void insertar(int valorInsertar){
//insertar en subarbol izquierdo
if(valorInsertar < datos){
//insertar en subarbol izquierdo
if(nodoizquierdo == null)
nodoizquierdo = new NodoArbol(valorInsertar);
else //continua recorriendo subarbol izquierdo
nodoizquierdo.insertar(valorInsertar);
}

//insertar nodo derecho


else if(valorInsertar > datos) {
//insertar nuevo nodoArbol
if(nododerecho == null)
nododerecho = new NodoArbol(valorInsertar);
else
nododerecho.insertar(valorInsertar);
}
} // fin del metodo insertar
}
class Arbol{
private NodoArbol raiz;

//construir un arbol vacio


public Arbol() {
raiz = null;
}

Pgina 12 de 16
//insertar un nuevo ndo en el arbol de busqueda binaria
public synchronized void insertarNodo(int valorInsertar) {
if(raiz == null)
raiz = new NodoArbol(valorInsertar); //crea nodo raiz
else
raiz.insertar(valorInsertar); //llama al metodo insertar
}
// EMPIEZA EL RECORRIDO EN PREORDEN
public synchronized void recorridoPreorden(){
ayudantePreorden(raiz);
}
//meoto recursivo para recorrido en preorden

private void ayudantePreorden(NodoArbol nodo){


if(nodo == null)
return;
System.out.print(nodo.datos + " "); //mostrar datos del nodo
ayudantePreorden(nodo.nodoizquierdo); //recorre subarbol izquierdo
ayudantePreorden(nodo.nododerecho); //recorre subarbol derecho
}
//EMPEZAR RECORRIDO INORDEN
public synchronized void recorridoInorden(){
ayudanteInorden(raiz);
}
//meoto recursivo para recorrido inorden
private void ayudanteInorden( NodoArbol nodo){
if(nodo == null)
return;

ayudanteInorden(nodo.nodoizquierdo);
System.out.print(nodo.datos + " ");
ayudanteInorden(nodo.nododerecho);
}
//EMPEZAR RECORRIDO PORORDEN
public synchronized void recorridoPosorden(){
ayudantePosorden(raiz);
}
//meotod recursivo para recorrido posorden
private void ayudantePosorden(NodoArbol nodo){
if( nodo == null )
return;
ayudantePosorden(nodo.nodoizquierdo);
ayudantePosorden(nodo.nododerecho);
System.out.print(nodo.datos + " ");
}
}
Pgina 13 de 16
Primero nos solicita ingresar el nmero de nodos que se desea que tenga el rbol.

Despus nos solicita que ingresemos los valores a colocar dentro del rbol.

Como ejemplo tenemos lo siguiente:

Pgina 14 de 16
PRUEBA DE ESCRITORIO
ARBOL BINARIO
3 1 2 5 4 6
Dato = N= i ++ i<=n valorinsertar valor datosnodo datos raiz nodo nodo
Nodos Dato i d
6 6 1 V
6 6 1 v 6 6 6 6 6 null null
10 6 2 v 10 10 10 10 6 10
4 6 3 v 4 4 4 4 6 4
2 6 4 v 2 2 2 2 6 2
3 6 5 v 3 3 3 3 6 3
5 6 6 v 5 5 5

RECORRIDO RECORRIDO RECORRIDO


POS-ORDEN IN-ORDEN
PRE-ORDEN Raiz izqu dere
Raiz izqu dere
Raiz izqu dere
3 2
2 6
5 3
4
4
2 4
10
6 4 5

5 6
10 10

RECORRIDO RECORRIDO
PRE-ORDEN IN-ORDEN
Raiz izqu dere Raiz izqu dere
2
6
3
4
4
2 5
4 6
5 10
10
Pgina 15 de 16

RECORRIDO
IN-ORDEN
Raiz izqu dere
2
CONCLUSIONES
En conclusin, encontramos que los rboles, en especial los rboles binarios nos
sirven para organizar datos para facilitar su manipulacin, ya sea el ingreso, borrado
o bsqueda de datos, y precisamente una de las principales ventajas de los rboles
binarios es la bsqueda, ya que como en muchos algoritmos de bsqueda
necesitamos tener la informacin ordenada y en nuestros rboles binarios
precisamente los datos van ingresando de forma ordenada.

BIBLIOGRAFIAS
Matemticas discretas: Aplicaciones y ejercicios. (2014). 1st ed. [ebook] Mxico:
anonimo, pp.241-272. Consultado en :
http://file:///C:/Users/Cess/Desktop/Arboles/Matemticas%20Discretas%20-
%20Villalpando%20y%20Garca.pdf [consultado el da 4 May 2017].

Pgina 16 de 16

Das könnte Ihnen auch gefallen