Está en la página 1de 10

Departamento: Ingeniería en Sistemas Computacionales

Materia: Estructura de Datos


Práctica Arboles de búsqueda binaria
Alumno(s): Pedro Ruiz Rangel Fecha: 24/11/18

OBJETIVO

El alumno aplicará los conceptos de estructuras no lineales árboles

TEMA DEL PLAN DE ESTUDIOS

4.1. Árboles

MATERIAL
 Equipo de trabajo.
 Netbeans o Eclipse.

MARCO TEÓRICO
Un árbol binario de búsqueda también llamados BST (acrónimo del inglés Binary Search Tree) es un tipo particular
de árbol binario que presenta una estructura de datos en forma de árbol usada en informática.
Un árbol binario de búsqueda (ABB) es un árbol binario definido de la siguiente forma:
Todo árbol vacío es un árbol binario de búsqueda.

Un árbol binario no vacío, de raíz R, es un árbol binario de búsqueda si:


• En caso de tener subárbol izquierdo, la raíz R debe ser mayor que el valor máximo almacenado en el subárbol
izquierdo, y que el subárbol izquierdo sea un árbol binario de búsqueda.
• En caso de tener subárbol derecho, la raíz R debe ser menor que el valor mínimo almacenado en el subárbol
derecho, y que el subárbol derecho sea un árbol binario de búsqueda.

Un árbol binario de búsqueda de tamaño 9 y profundidad 3, con raíz 8 y hojas 1, 4, 7 y 13


Para una fácil comprensión queda resumido en que es un árbol binario que cumple que el subárbol izquierdo de
cualquier nodo (si no está vacío) contiene valores menores que el que contiene dicho nodo, y el subárbol derecho
Av. Educación Superior No. 2000 Tels. 01 (445) 45 774 68 al 71 Ext.107 Fax Ext.127
Col. Benito Juárez. Uriangato, Gto. sistemas@itsur.edu.mx
C.P. 38980 Apartado Postal No. 61 www.itsur.edu.mx
(si no está vacío) contiene valores mayores.
Para estas definiciones se considera que hay una relación de orden establecida entre los elementos de los nodos.
Que cierta relación esté definida, o no, depende de cada lenguaje de programación. De aquí se deduce que puede
haber distintos árboles binarios de búsqueda para un mismo conjunto de elementos.
La altura h en el peor de los casos siempre el mismo tamaño que el número de elementos disponibles. Y en el
mejor de los casos viene dada por la expresión , donde ceil indica redondeo por
exceso.
El interés de los árboles binarios de búsqueda (ABB) radica en que su recorrido en inorden proporciona los
elementos ordenados de forma ascendente y en que la búsqueda de algún elemento suele ser muy eficiente.
Dependiendo de las necesidades del usuario que trate con una estructura de este tipo se podrá permitir la igualdad
estricta en alguno, en ninguno o en ambos de los subárboles que penden de la raíz. Permitir el uso de la igualdad
provoca la aparición de valores dobles y hace la búsqueda más compleja.

Operaciones
Todas las operaciones realizadas sobre árboles binarios de búsqueda están basadas en la comparación de los
elementos o clave de los mismos, por lo que es necesaria una subrutina, que puede estar predefinida en el lenguaje
de programación, que los compare y pueda establecer una relación de orden entre ellos, es decir, que dados dos
elementos sea capaz de reconocer cual es mayor y cual menor. Se habla de clave de un elemento porque en la
mayoría de los casos el contenido de los nodos será otro tipo de estructura y es necesario que la comparación se
haga sobre algún campo al que se denomina clave.

Búsqueda
La búsqueda consiste acceder a la raíz del árbol, si el elemento a localizar coincide con éste la búsqueda ha
concluido con éxito, si el elemento es menor se busca en el subárbol izquierdo y si es mayor en el derecho. Si se
alcanza un nodo hoja y el elemento no ha sido encontrado se supone que no existe en el árbol. Cabe destacar que
la búsqueda en este tipo de árboles es muy eficiente, representa una función logarítmica. El maximo número de
comparaciones que necesitaríamos para saber si un elemento se encuentra en un árbol binario de búsqueda
estaría entre [log2(N+1)] y N, siendo N el número de nodos. La búsqueda de un elemento en un ABB (Árbol Binario
de Búsqueda) se puede realizar de dos formas, iterativa o recursiva.

Inserción
La inserción es similar a la búsqueda y se puede dar una solución tanto iterativa como recursiva. Si tenemos
inicialmente como parámetro un árbol vacío se crea un nuevo nodo como único contenido el elemento a insertar. Si
no lo está, se comprueba si el elemento dado es menor que la raíz del árbol inicial con lo que se inserta en el
subárbol izquierdo y si es mayor se inserta en el subárbol derecho. De esta forma las inserciones se hacen en las
hojas.

Evolución de la inserción del elemento "5" en un ABB.


Como en el caso de la búsqueda puede haber varias variantes a la hora de implementar la inserción en el TAD

Av. Educación Superior No. 2000 Tels. 01 (445) 45 774 68 al 71 Ext.107 Fax Ext.127
Col. Benito Juárez. Uriangato, Gto. sistemas@itsur.edu.mx
C.P. 38980 Apartado Postal No. 61 www.itsur.edu.mx
(Tipo Abstracto de Datos), y es la decisión a tomar cuando el elemento (o clave del elemento) a insertar ya se
encuentra en el árbol, puede que éste sea modificado o que sea ignorada la inserción. Es obvio que esta operación
modifica el ABB perdiendo la versión anterior del mismo.

Borrado
La operación de borrado no es tan sencilla como las de búsqueda e inserción. Existen varios casos a tener en
consideración:
Borrar un nodo sin hijos o nodo hoja: simplemente se borra y se establece a nulo el apuntador de su padre. Nodo a
eliminar 74.

Borrar un nodo con un subárbol hijo: se borra el nodo y se asigna su subárbol hijo como subárbol de su padre.
Nodo a eliminar 70.

Borrar un nodo con dos subárboles hijo: la solución está en reemplazar el valor del nodo por el de su predecesor o
por el de su sucesor en inorden y posteriormente borrar este nodo. Su predecesor en inorden será el nodo más a la
derecha de su subárbol izquierdo (mayor nodo del subarbol izquierdo), y su sucesor el nodo más a la izquierda de
su subárbol derecho (menor nodo del subarbol derecho). En la siguiente figura se muestra cómo existe la
posibilidad de realizar cualquiera de ambos reemplazos: Nodo a eliminar 59.

DESARROLLO

Av. Educación Superior No. 2000 Tels. 01 (445) 45 774 68 al 71 Ext.107 Fax Ext.127
Col. Benito Juárez. Uriangato, Gto. sistemas@itsur.edu.mx
C.P. 38980 Apartado Postal No. 61 www.itsur.edu.mx
1. Enciende el equipo de cómputo.
2. Abre el programa eclipse o netBeans.
3. Crea un proyecto con el nombre de PracticaED
4. Crea una clase con el nombre NodoABB
5. En el editor de código te mostrará lo siguiente creado por la clase:

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package practicaed;

/**
*
* @author PC
*/
public class NodoABB {

}
6. Dentro de las llaves de la clase NodoABB, escribe el siguiente código; es un método recursivo
char dato;
NodoABB izq;
NodoABB der;

/**
* Crea un nodo vacío
*/
public NodoABB() {
izq = null;
der = null;
}

/**
* Crea un nodo sin hojas con el valor recibido como parámetro
* @param x Valor a ingresar en el nodo
*/
public NodoABB(char x) {
dato = x;
izq = der = null;
}

/**
* Recorre los subárboles (si los hay) de la izquierda y derecha
*/
public void enOrden() {

if (izq != null) {
izq.enOrden();
}
System.out.print(" " + dato);
if (der != null) {
der.enOrden();

Av. Educación Superior No. 2000 Tels. 01 (445) 45 774 68 al 71 Ext.107 Fax Ext.127
Col. Benito Juárez. Uriangato, Gto. sistemas@itsur.edu.mx
C.P. 38980 Apartado Postal No. 61 www.itsur.edu.mx
}
}

7. Crea una clase con el nombre ArbolBB.

8. Añade las siguientes librerías.


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

9. Dentro de la clase ArbolBB entre llaves de inicio de la clase escribe el siguiente código:

static NodoABB raiz;


static char resp = 's';
static char valor;

public ArbolBB() {
raiz = null;
}

/**
* Ingresa un nuevo nodo al árbol
*
* @param nodo Raiz del arbol
* @param valor Valor que se generará en el nodo y se acomodará en el arbol a partir de la raiz
* @return
*/
public ArbolBB insertarBB(NodoABB nodo, char valor) {
if (valor < nodo.dato) {
if (nodo.izq == null) {
NodoABB otro = new NodoABB(valor);
nodo.izq = otro;
} else {
return insertarBB(nodo.izq, valor);
}
} else {
if (valor > nodo.dato) {
if (nodo.der == null) {
NodoABB otro = new NodoABB(valor);
nodo.der = otro;
} else {
return insertarBB(nodo.der, valor);
}
} else {
System.out.println("El caracter ya se encuentra en el arbol");
}
}
return this;
}

/**
* Recorrido desde la raíz
*/

Av. Educación Superior No. 2000 Tels. 01 (445) 45 774 68 al 71 Ext.107 Fax Ext.127
Col. Benito Juárez. Uriangato, Gto. sistemas@itsur.edu.mx
C.P. 38980 Apartado Postal No. 61 www.itsur.edu.mx
public void recorridoEnOrden() {
if (raiz != null) {
raiz.enOrden();
}
}

public static void main(String args[]) throws IOException {


ArbolBB arbol = new ArbolBB();
BufferedReader lector = new BufferedReader(new InputStreamReader(System.in));

System.out.print("Introduce el elemento de la raiz ");


valor = lector.readLine().charAt(0);

raiz = new NodoABB(valor);

do {
System.out.print("Introduce el elemento a insertar ");
valor = lector.readLine().charAt(0);
arbol.insertarBB(raiz, valor);
System.out.print("Existe otro elemento s / n ");
resp = lector.readLine().charAt(0);
} while (resp == 's');

arbol.recorridoEnOrden();
}

10. Ejecuta el programa, si no hay errores introduce los siguientes caracteres en ese orden (donde “e” es la
raíz): e, c, h, a, d, g, i. Después de insertar teclee n y en consola se visualizará el resultado, de lo contrario
analiza el código de ambas clases.

RESULTADOS
Coloca aquí el resultado de la consola (con el ingreso de datos)
Resultado: a c d e g h i

EVALUACIÓN
1. ¿Cuál es el método de recorrido que se implemento?
 Recorrido in-orden.
2. Elabora el árbol gráficamente y explica el recorrido realizado.
 El recorrido inorden básicamente consiste en primero tomar izquierda, después la raiz y por ultimo derecha.

Av. Educación Superior No. 2000 Tels. 01 (445) 45 774 68 al 71 Ext.107 Fax Ext.127
Col. Benito Juárez. Uriangato, Gto. sistemas@itsur.edu.mx
C.P. 38980 Apartado Postal No. 61 www.itsur.edu.mx
Recorrido Recorrido
inorden: inorden:
IRD IRD E Raiz

Raiz Raiz Raiz


C H

A D G I
Izquierda Derecha Hoja Hoja
Valores tomados
A

E Raiz

Raiz C H

D G I
Derecha Hoja Hoja
Valores tomados
A C

Raiz
E
Raiz
H
Derecha Hoja Hoja
Valores tomados
A
D
C DG I
Raiz
E
Raiz

Izquierda
H
Av. Educación Superior No. 2000 Tels. 01 (445) 45 774 68 al 71 Ext.107 Fax Ext.127
Col. Benito Juárez. Uriangato, Gto. sistemas@itsur.edu.mx

D G C.P. 38980 Apartado Postal No. 61


I www.itsur.edu.mx
Derecha
Valores tomados
A C D E

Raiz
H
Derecha Derecha

Valores tomados G I
A C D E G

Raiz
Valores tomados
Derecha
A C D E G H

Valores tomados
A C D E G H I

I Derecha
3. Menciona cuál es la utilidad de los árboles y de este tipo de recorrido.
 Los arboles son de mucha importancia, pues estos nos permiten darles un orden,
una jerarquía tanto a archivos como a datos, en los sistemas operativos son de
mucha utilidad, pues los gestores de archivos utilizan esta estructura para organizar lógicamente los
archivos.
 Este tipo de recorrido nos es de utilidad al momento de buscar y organizar datos en orden ascendente.
4. Repite las preguntas 2 y 3 con datos que tu elijas.
Datos: f, d, i, b, e, h, j
Donde: f es la raiz.
Salida: b d e f h i j
 El recorrido inorden básicamente consiste en primero tomar izquierda, después la raiz y por ultimo derecha.

Recorrido
inorden:
IRD F Raiz

Raiz Raiz
D I

B E H J
Izquierda Derecha Hoja Hoja
Valores tomados

Av. Educación Superior No. 2000 Tels. 01 (445) 45 774 68 al 71 Ext.107 Fax Ext.127
Col. Benito Juárez. Uriangato, Gto. sistemas@itsur.edu.mx
C.P. 38980 Apartado Postal No. 61 www.itsur.edu.mx
B

F Raiz

Raiz D I

E H J
Derecha Hoja Hoja
Valores tomados
B D

Raiz
F
Raiz
I
Derecha Hoja Hoja
Valores tomados
B
E
D EH J

Raiz
F
Raiz

Izquierda I Derecha
Valores tomados
B D E F
E H J
Raiz
I
Izquierda Derecha

Valores tomadosH J
B D E F H

Raiz

Av. Educación Superior No. 2000 Tels. 01 (445) 45 774 68 al 71 Ext.107 Fax Ext.127
Col. Benito Juárez. Uriangato, Gto. sistemas@itsur.edu.mx
C.P. 38980 Apartado Postal No. 61 www.itsur.edu.mx
Derecha
Valores tomados
B D E F H I

Valores tomados
B D E F H I J

 Los arboles son de mucha importancia, pues estos nos permiten darles un orden, una jerarquía tanto a
archivos como a datos, en los sistemas operativos son de mucha utilidad, pues los gestores de archivos
utilizan esta estructura para organizar lógicamente los archivos.
 Este tipo de recorrido nos es de utilidad al momento de buscar y organizar datos en orden ascendente.

CONCLUSIONES
Los arboles en la programacion, son una de las estructuras de datos mas eficientes ya que este nos facilita tanto la
búsqueda como el ordenamiento, ya que, al no ser lineal, las operaciones se reducen de manera considerada al
momento de realizar las búsquedas u ordenamientos. Además de ser una pieza fundamental de los administradores
de archivos, esto en sistemas operativos.

BIBLIOGRAFÍA

 Deitel Harvey, Deitel Paul. Cómo Programar en Java 5a. Edición. Ed. Pearson/Prentice may.
 Luis Joyanes Aguilar. Programación en Java 2 1a Edición. Ed. Mc Graw Hill.

Av. Educación Superior No. 2000 Tels. 01 (445) 45 774 68 al 71 Ext.107 Fax Ext.127
Col. Benito Juárez. Uriangato, Gto. sistemas@itsur.edu.mx
C.P. 38980 Apartado Postal No. 61 www.itsur.edu.mx

También podría gustarte