Documentos de Académico
Documentos de Profesional
Documentos de Cultura
¿Qué es un árbol?
Un árbol es una Estructura de datos ampliamente usados que emulan la forma de un árbol
(conjunto de nodos conectados).
NODO
Un nodo es la unidad sobre la que se construye el árbol y puede tener desde cero o mas
nodos hijos conectados a el.
Se dice que un nodo “a” es Padre de un nodo “b” si es que existe un enlace entre “a” y “b”
(en este caso también decimos que “b” es el hijo de “a”). Solo puede haber un único nodo sin
padres, que llamaremos raíz. Un nodo que tiene hijos se conoce como Hoja. Los demás
nodos (también padres y uno o varios hijos) se les conocen como Rama.
Cuando un árbol tiene 0 relaciones se llama nodo hoja. Si tiene un número finito de
relaciones, cada una de esas relaciones es un subárbol.
Padre
Hijo Hijo
Existe un tipo de árbol denominado árbol binario que puede ser implementado fácilmente en
una computadora.
Un árbol binario es un conjunto finito de cero o más nodos tales que:
Existe un nodo denominados raíz del árbol
Cada nodo puede tener 0, 1 o 2 subárboles, conocidos como subárbol izquierdo y subárbol
derecho
Clasificación de Arboles Binarios
Existen cuatro tipos de árbol binario:.
A. B. Distinto.
A. B. Similares.
A. B. Equivalentes.
A. B. Completos.
A continuación se hará una breve descripción de los diferentes tipos de árbol binario así co-
mo un ejemplo de cada uno de ellos.
A. B. DISTINTO
Se dice que dos árboles binarios son distintos cuando sus estructuras son diferentes. Ejem-
plo:
A. B. SIMILARES
Dos arboles binarios son similares cuando sus estructuras son idénticas, pero la información
que contienen sus nodos es diferente. Ejemplo:
A. B. EQUIVALENTES
Son aquellos arboles que son similares y que además los nodos contienen la misma informa-
ción. Ejemplo:
A. B. COMPLETOS
Son aquellos arboles en los que todos sus nodos excepto los del ultimo nivel, tiene dos hijos;
el subarbol izquierdo y el subarbol derecho.
Un árbol binario es un árbol con raíz en el que cada nodo tiene como máximo dos hijos.
Un árbol binario lleno es un árbol en el que cada nodo tiene cero o dos hijos.
Un árbol binario perfecto es un árbol binario lleno en el que todas las hojas (vértices con cero
hijos) están a la misma profundidad (distancia desde la raíz, también llamada altura).
A veces un árbol binario perfecto es denominado árbol binario completo. Otros definen un
árbol binario completo como un árbol binario lleno en el que todas las hojas están a
profundidad n o n-1, para alguna n.
Inorden: G-D-B-H-E-I-A-C-J-K-F
Preorden: A-B-D-G-E-H-I-C-F-J-K
Postorden: G-D-H-I-E-B-K-J-F-C-A
Operación “buscar”
public boolean buscar(Object o)
{
if (o.equals(valor))
return true;
else if (o.compareTo(valor)<0)
return buscar(getIzq(),o);
else return buscar(getDer(),o);
}
Operación “insertar”
public NodoBinario insertar(Comparable o){
if (o.compareTo(valor)<0)
setIzq(insertar(getIzq(),o));
else setDer(insertar(getDer(),o));
return this;
}
Dentro de la clase NodoBinarioVacio:
public NodoBinario insertar(Comparable o)
{
return new NodoBinario(o);
}
Operación “recorrer”
Los recorridos pueden ser en preorden, postorden o inorden (orden simétrico). Todos son
O(N).
public void preOrder(SList aList)
{
aList.addElement(value);
left.preOrder(aList);
right.preOrder(aList);
}
public void inOrder(SList aList)
{
left.inOrder(aList);
aList.addElement(value);
right.inOrder(aList);
}
public void posOrder(SList aList)
{
left.posOrder(aList);
right.posOrder(aList);
aList.addElement(value);
}
Los recorridos no necesitan obligatoriamente recursividad, se puede emplear una pila para
realizarlos iterativamente.
Operación “borrado”
El nodo a borrar debe ser reemplazado por el nodo más a la derecha en el subárbol izquierdo
o el nodo más a la izquierda en el subárbol derecho (el nodo más a la derecha del subárbol
izquierdo será mayor o igual que cualquier otro nodo de ese subárbol y menor que todos los
del subárbol derecho, y el nodo más a la izquierda del subárbol derecho será menor que
todos los demás nodos de ese subárbol y mayor que todos los del subárbol izquierdo). Para
el caso en el que el nodo elegido tengo un subárbol, hay por lo menos tres soluciones
posibles:
La primera consiste en conservar la estructura del subárbol, y colgar del elemento ubi-
cado en el extremo (el elemento menor o mayor) correspondiente al subárbol donde
se encuentra el elemento a promover hacia la raíz (en este ejemplo, el subárbol iz-
quierdo, por lo cual se buscará el elemento más a la izquierda), lo cual es consistente,
porque todos los elementos en el subárbol promovido serán mayores que los del
subárbol del cual estaban colgados a la derecha. El inconveniente que presenta esta
solución es que debe utilizarse una función encontrarMínimo() o encontrarMáximo().
La segunda solución consiste en colgar del padre del nodo promovido hacia la raíz, el
subárbol remanente. Esto es consistente, porque todo elemento del subárbol derecho
de un nodo será mayor que el valor de ese nodo, y viceversa. Estas soluciones apro-
vechan la ventaja de contar con que el nodo promovido tiene, a lo sumo, un subárbol.
Un hueco dejado por un nodo promovido también puede pensarse como una elimina-
ción.
Arboles Enhebrados
Existe un tipo especial de árbol binario llamado enhebrado, el cual contiene hebras que pue-
den estar a la derecha o a la izquierda. El siguiente ejemplo es un árbol binario enhebrado a
la derecha.
Un árbol binario de búsqueda es aquel en el que el hijo de la izquierda (si existe) de cualquier
nodo contiene un valor más pequeño que el nodo padre, y el hijo de la derecha (si existe)
contiene un valor más grande que el nodo padre.